1

音楽を再生するアプリケーションがあります。(オプションメニューで閉じることもできます。)

しかし、問題は、ホームボタンを押すと音楽が再生され続けることです。ユーザーがホームボタンを押したときに音楽を停止したいです。

music.stop()にonPause()とonStop()メソッドを入れてみました。しかし、新しいアクティビティを開始すると音楽も停止しますが、ホームボタンを押したときにのみ停止したくないため、失敗します。

私のコードは次のとおりです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.options);
     it=(RadioButton)findViewById(R.id.radio0);
     ti=(RadioButton)findViewById(R.id.radio1);
     but=(ToggleButton)findViewById(R.id.toggleButton1);
     music=MediaPlayer.create(Options.this, R.raw.avril);
   mainmenu=new Intent("com.KAYA.ingilizce_gelistirme.BASLANGIC");


    but.setOnClickListener(new View.OnClickListener()   {

        @Override
        public void onClick(View v) {
            if(but.isChecked()) {
                if(!music.isPlaying())
            music.start();
            }
            else
            if(music.isPlaying())
            music.pause();

        }
    });
     it.setChecked(true);
     Button menu=(Button)findViewById(R.id.button1);
     menu.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            startActivity(mainmenu);
        }
    });

}

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub


    startActivity(new Intent(mainmenu));
    }


@Override
protected void onPause() {

    if(music.isPlaying()){
    music.pause();
    music.release();
    }
    but.setChecked(false);

    super.onPause();

}



@Override
protected void onResume() {
    super.onResume();

}

ここで音楽の再生が始まる OPTIONS ACTIVITY ですが、メニュー アクティビティを通過すると、音楽も停止します。

4

3 に答える 3

1

私が提案できる2つの方法があります

1) に入れ、デフォルトでに設定され、新しいアクティビティの開始、バックプレスなどのあらゆる場合に設定される をonPause()作成します。そのため、onPause が呼び出され、フラグが false の場合、音楽を停止できます。flag/booleanfalsetrue

2) すでにバックグラウンドがある場合、音楽を停止できるservice場合は、どのアクティビティがフォアグラウンドにあるかを確認し続けることができます。homeScreen

編集:-アプリがフォアグラウンドにないかどうかを確認します。ブライアンが別の回答で示唆したように。こちらをご覧ください。アプリがフォアグラウンドかバックグラウンドかを確認し、それに応じてアクションを実行できます

于 2013-02-02T20:06:39.777 に答える
1

音楽を再生するには、別のサービスを起動する必要があります。

方法 1

この方法は、大規模なアプリケーションに適しています。

次のクラスを定期的に (たとえば、3 秒ごとに) 音楽サービス内で呼び出して、アプリがバックグラウンドにあるかどうかを確認します。クレジット: Android アプリケーションがフォアグラウンドにあるかどうかを確認してください。

class ForegroundCheckTask extends AsyncTask<Context, Void, Boolean> {
    @Override
    protected Boolean doInBackground(Context... params) {
        final Context context = params[0];
        return isAppOnForeground(context);
    }

    private boolean isAppOnForeground(Context context) {
        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
        if (appProcesses == null) {
            return false;
        }
        final String packageName = context.getPackageName();
        for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
            if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) {
                return true;
            }
        }
        return false;
    }
}

方法 2

次に、アプリケーションがバックグラウンドになっていることを検出したら、サービスを閉じる必要があります。ここを参照してください: Android アプリケーションがバックグラウンドで実行されているかどうかを確認する. すべてのクラスで onPause と onResume を手動でオーバーライドしたくないことに注意してください。可能であれば、共通の祖先を使用したいと考えています。

于 2013-02-02T20:07:56.023 に答える
0

私が見つけた最良の方法は、「アクティブ」などと呼ばれるアプリケーションクラスに静的ブール値を設定することでした。アクティビティのいずれかが一時停止されている場合は false に設定し、アクティビティが再開されている場合は true に設定します。次に、onStop メソッドで「アクティブ」のステータスを確認します。false の場合、ユーザーがホームをクリックし、他のアクティビティは開始されていないと安全に想定できます。ここでメディア プレーヤーをオフにします。

于 2013-02-06T03:11:44.730 に答える