0

Android の学習を始めたばかりで、簡単なアプリケーションを作成しようとしました。ボタンをクリックすると、MP が再生されます。

以下のコードは正常に動作しますが、メディア プレーヤーの try-catch ステートメントで例外が発生したときにトースト メッセージを表示する方法がわかりません。

さらに実験するために、プレーヤースレッドを別のクラスに保持したいと思います。

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();
                                }
                            });

別のスレッドでトースト メッセージを表示...

于 2014-01-24T09:45:12.353 に答える
0

run() メソッドで使用する

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