0

我刚刚开始学习 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();

    }
 }
4

2 回答 2

1

您不能直接显示来自非 UI 线程的祝酒词。是的,你可以做到,但通过实施runOnUiThread.

runOnUiThread(new Runnable() {
                            public void run() {
                                Toast.makeText(getApplicationContext(), "Your message", Toast.LENGTH_LONG).show();
                                }
                            });

在不同的线程上显示 Toast 消息...

于 2014-01-24T09:45:12.353 回答
0

在 run() 方法中使用它

Toast.makeText(getApplicationContext(),"toast msg here",Toast.LENGTH_SHORT).show();  
于 2014-01-24T09:46:45.433 回答