3

ユーザーがホームボタンを押したときにアクティビティを強制終了したい。このために私は次のコードを使用しています:

public void onPause() {
    super.onPause();
    this.finish();
}

正常に動作します。ただし、ホームの代わりに、ユーザーが[戻る]ボタンを押すと、アクティビティも強制終了されます。戻るボタンを通常どおりに実行する必要があります。つまり、ユーザーを前のアクティビティに移動させる必要があります。何かご意見は?

以下は私のActivityクラスのコードです:

public class HomeScreen extends Activity {
    /** Called when the activity is first created. */
        private Button btn_play;
        private MediaPlayer mp = new MediaPlayer();
        private static int AUDIO_NO = 1;
        public static String isVideoSelected = "";
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            try{
                btn_play = (Button)findViewById(R.id.btn_play);
                btn_play.setOnClickListener(btn_listener);
                if(isVideoSelected!="") isVideoSelected="";
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        play_audio(AUDIO_NO);
                    }
                }, 1000);
            } catch(Exception e) {

            }
        }
        private void play_audio(int slno) {
            try {
                if(slno == 1) mp = MediaPlayer.create(getBaseContext(), R.raw.audio_1);
                else if(slno == 2) mp = MediaPlayer.create(getBaseContext(), R.raw.audio_2);
                mp.setLooping(false);
                mp.setOnCompletionListener(audio_listener);
                mp.start();
            } catch(Exception e) {
                // do nothing
            }
        }
        private MediaPlayer.OnCompletionListener audio_listener = new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                // TODO Auto-generated method stub
                try{
                    mp.release();
                    if(AUDIO_NO == 1) {
                        play_audio(2);
                        AUDIO_NO++;
                    }
                } catch(Exception e) {

                }
            }
        };
        private View.OnClickListener btn_listener = new View.OnClickListener() {        
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try{
                    if(mp.isPlaying()) {
                        mp.stop();
                        mp.release();
                    }
                    Intent intent = new Intent(getApplicationContext(), ScreenTwo.class);
                    startActivity(intent);
                } catch(Exception e) {

                } finally {
                }
            }
        };
        public void onUserLeaveHint() {
            super.onUserLeaveHint();
            try{
                if(mp.isPlaying()) {
                    mp.stop();
                    mp.release();
                }
                btn_play = null;
            } catch(Exception e) {

            }
        }
        @Override
        public void onDestroy() {
            super.onDestroy();
            try{
                if(mp.isPlaying()) {
                    mp.stop();
                    mp.release();
                }
                btn_play = null;
            } catch(Exception e) {

            }
        }
    }
4

2 に答える 2

2

ここであなたの動機についてもう少し情報を与える必要があると思います:なぜあなたはシステムにそれを管理させるのではなく、ホームプレスであなたの活動を殺したいのですか?それ自体では起こらないことを達成しようとしていますか?ユーザーに特定のアクティビティへのタスク切り替えを望まないだけの場合は、タスクスタックに使用できるさまざまなフラグを確認してください。

編集:この場合、キャッチオール例外処理で問題が発生している可能性があります。これらの行をfinally、ではなく句に移動してみtryてください。例外ハンドラーに、少なくともキャッチしている例外をログに記録させてください(Log.e("tag", "Exception caught; ignoring:", e))。キャッチオールは一般的に悪いプログラミング手法です。特に、少なくとも例外をログに記録していない場合は、何が問題になっているのかを確認できます。

        Intent intent = new Intent(getApplicationContext(), ScreenTwo.class);
        startActivity(intent);
于 2011-03-07T14:01:15.117 に答える
0

onPause()は、ユーザーがアクティビティを離れるたびに呼び出されるため、finish()を呼び出す場所ではありません。また、ホームボタンを上書きできるかどうか、またはそれがとにかく本当に実行する必要があるかどうかもわかりません。

于 2011-03-07T13:59:26.770 に答える