我刚刚开始学习 Android 并尝试编写一个简单的应用程序。单击按钮后,MP 开始播放。
下面的代码工作正常,但我无法弄清楚当媒体播放器 try-catch 语句中发生异常时如何显示 toast 消息。
我想将播放器线程保留在单独的类中以进行进一步的实验。
public class MainActivity extends Activity {
static String url="http://stream001.radio.hu:8080/mr3.mp3";
static Activity context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context=this;
//set button listener
Button btn=(Button) findViewById(R.id.button1);
btn.setOnClickListener(
new OnClickListener(){
public void onClick(View v){
myMediaPlayerClass.startMediaPlayer(url, context);
}
}
);
}
...
}
public class myMediaPlayerClass {
static MediaPlayer mp=new MediaPlayer();
public static void startMediaPlayer( final String myUrl, final Activity myContext){
new Thread(new Runnable(){
public void run(){
string url=myUrl;
Context context=myContext;
//***********************************************
// trying to Toast from here results in crash
//Toast.makeText(context, "Thread running", Toast.LENGTH_LONG).show();
//*********************************************************************
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {mp.setDataSource(url);}
catch (IllegalArgumentException e) {}
catch (SecurityException e) {}
catch (IllegalStateException e) {}
catch (IOException e) {}
mp.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer paramMediaPlayer){}
});
mp.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {}
});
try {mp.prepare();}
catch (IllegalStateException e) {}
catch (IOException e) {}
mp.setVolume(1, 1);
mp.start();
}
}).start();
}
}