0

アラームマネージャーでイベントを作成するアプリケーションがあり、特定の時間に呼び出されます。コードは次のようになります

Intent intent = new Intent(this, AlarmActivity.class);
pendingIntent = PendingIntent.getActivity(this,req_code, intent, PendingIntent.FLAG_CANCEL_CURRENT);    
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY*7,
                    pendingIntent);

インテントはこのアクティビティを呼び出します。

public class AlarmActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void onStart(){
        super.onStart();
        //Change ringer mode
        //Add notification in status bar
        //Other booring stuff here...
        Toast.makeText(this,"Finishing",2000).show();
        finish();
    }
}

退屈なものには、バックグラウンドで実行する必要があるコードがあります(リンガーモードの変更)

1つのことを除いて、すべてがうまくいきます。アラーム マネージャーがアクティビティを呼び出すたびに、アプリケーションがフォアグラウンドになります。バックグラウンドで呼び出し音モードを変更し、ステータスバーに通知を追加するだけの場合。

アプリケーションがフォアグラウンドにならないようにする方法はありますか?

4

2 に答える 2

2

これはすべてBroadCastReceiverで行う必要があります。UI はなくContext、Receiver のメソッドに渡される変数がonReceive()あります。これにより、実際の UI がなくても、基本的にアクティビティが行うことはすべて実行できます。これは、呼び出し音を設定したり、ステータス バーの通知を表示したりできることを意味します。BroadcastReceiver クラスは次のようになります。

public class AlarmBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    //Change ringer mode
    //Add notification in status bar
    //Other boring stuff here...
    Toast.makeText(context,"Finishing",2000).show();
    }
}

Toastの場合、という名前の変数contextが使用されることに注意してください。

AlarmManagerコードは次のようになります。

Intent intent = new Intent(this, AlarmBroadcastReceiver.class);
pendingIntent = PendingIntent.getBroadcast(this,req_code, intent, PendingIntent.FLAG_CANCEL_CURRENT);    
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY*7,
                    pendingIntent);

マニフェストには次のものが必要です。

 <receiver android:name=".AlarmBroadcastReceiver" >
        </receiver>
于 2012-12-21T20:29:46.293 に答える