1

メイン アクティビティと SetAlarm アクティビティの 2 つのアクティビティがあります。Main から SetAlarm Activity を呼び出します。アラームを設定するときに、メインのインスタンスを作成します。メインの別のインスタンスを作成せずにアラームを設定するにはどうすればよいですか? または、アラームを設定する前にメインを強制終了しますか? これにはかなり新しい。アラーム マネージャーの例をいくつか読みましたが、それらはすべて新しいインテントを設定しているようで、これが私の 2 つのインスタンスを作成していると思います。これがアラームの設定方法です。それは消えます。

メインから SetAlarm を呼び出す方法は次のとおりです。

public void setAlarm(View view) {
    Intent intent = new Intent(this, SetAlarmActivity.class);
    startActivityForResult(intent, 2);  
} 

アラームの設定方法は次のとおりです。

public void setUpAlarm() {
    if (VERBOSE) Log.v(TAG, "+++ IN setUpAlarm +++");                   
        PLAY_MUSIC = "Y";
        Intent intentAlarm = new Intent(this, MainActivity.class);
        intentAlarm.putExtra("playMusic",PLAY_MUSIC);
        intentAlarm.putExtra("mPos", mPos);
        intentAlarm.putExtra("result",ALARM_SET);
        setResult(RESULT_OK,intentAlarm);
        pIntent = PendingIntent.getActivity(this, 12345, 
                intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager am = (AlarmManager)(this.getSystemService( Context.ALARM_SERVICE ));
        am.set(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(), pIntent );
    } // setAlarmPlaySong

メインでアラームを切りました:

@Override
public void onResume() {
    if (VERBOSE) Log.v(TAG, "+++ IN onResume +++");
    super.onResume();  
    Intent intent = getIntent()
    if (intent.hasExtra("playMusic")  && intent.hasExtra("mPos")) {
   playMusicFlag = intent.getStringExtra("playMusic"); 
   mPos = intent.getIntExtra("mPos", 0);   
   if (playMusicFlag.equalsIgnoreCase("Y")) {
       if (VERBOSE) Log.v(TAG, "+++ playMusicFlag is SET+++");
           playSongs();
               showStopAlarmButton();
       } // if    
   }
}
4

3 に答える 3

2

startActivity がアラーム アクティビティの複数のインスタンスを開始しないようにする場合は、マニフェストに移動し、アラーム アクティビティに launchMode という名前の属性を追加して、それを SingleTop に設定する必要があります。これにより、1 つのインスタンスのみがタスク バック スタックに残るようになります。 (すべての活動がLIFO方式で存在する場所)

于 2013-04-21T06:01:46.090 に答える
0

デフォルトでは、Activityは複数のタスクで複数回インスタンス化できます。単一のままにしたい場合はandroid:launchMode="singleTask"、AnroidManifest.xml のアクティビティ宣言で指定し、メイン アクティビティをオーバーライドして、メイン アクティビティが既にインスタンス化されている場合Activity#onNewIntent()に新しいインテントを受け取ります。AlarmManager

詳細については、タスクとバック スタックを参照してください。図 3とほぼ同じ状況に直面しています。

于 2013-04-21T06:06:49.320 に答える