Как убить активность, когда нажата кнопка «Домой»? - PullRequest
3 голосов
/ 07 марта 2011

Я хочу убить активность, когда пользователь нажимает кнопку «Домой». Для этого я использую следующий код:

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

Работает нормально. Но вместо Home, если пользователь нажимает кнопку «Назад», это также убивает активность. Я хочу, чтобы кнопка «Назад» работала как обычно, т. Е. Она должна привести пользователя к предыдущему действию. Есть мысли?

Ниже приведен код моего класса занятий:

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) {

            }
        }
    }

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

Я думаю, вам нужно дать немного больше информации о вашей мотивации: почему вы хотите прекратить свою деятельность на домашних прессах вместо того, чтобы позволить системе управлять ею?Чего вы пытаетесь достичь, чего не происходит само по себе?Если вам просто не нужно, чтобы пользователи переключались с заданий на конкретное действие, проверьте различные флаги, которые вы можете использовать для стека задач .

РЕДАКТИРОВАТЬ: В этом случае выВероятно, вы вызываете проблему с обработкой исключений.Попробуйте переместить эти строки в предложение finally, а не в try, и пусть ваш обработчик исключений как минимум зарегистрирует исключение, которое он перехватывает (Log.e("tag", "Exception caught; ignoring:", e)).Catch-alls, как правило, плохая практика программирования, особенно если вы хотя бы не регистрируете исключение, чтобы увидеть, что идет не так.

        Intent intent = new Intent(getApplicationContext(), ScreenTwo.class);
        startActivity(intent);
0 голосов
/ 07 марта 2011

onPause () вызывается каждый раз, когда пользователь покидает вашу активность, чтобы не вызывать метод finish (). Кроме того, я не уверен, можете ли вы переопределить кнопку «Домой» или это то, что вы должны сделать в любом случае.

...