4

通知を開始する方法を理解しようとしています。通知を作成することは私が求めていることではなく、バックグラウンドで通知を起動する方法であり、邪魔にならず、ユーザーは何をしていたかを実行できます。カレンダーの場合、正確に言うとリマインダーです。私が使用していることに注意することも重要ですAlarmManager

  1. バックグラウンドで実行するには、どのメソッドを使用する必要がありますか。BroadCastReciever、、Serviceなど。

  2. 私が見つけた調査でも、に問題がありAlarmManagerます。アプリが強制終了されるか、電話がオフになると、アラームも鳴ります。そのイベントリマインダーに対して通知が確実に表示されるようにするには、他にどのような方法を使用する必要がありますか?

追加情報が必要な場合は、お問い合わせください。そうさせていただきます。前もって感謝します。

4

3 に答える 3

3

ブロードキャストレシーバーまたはインテントサービスを作成します。それで...

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);


Date date = new Date(); //set this to some specific time
or Calendar calendar = Calendar.getInstance();

//set either of these to the correct date and time. 

then 
Intent intent = new Intent();
//set this to intent to your IntentService or BroadcastReceiver
//then...
PendingIntent alarmSender = PendingIntent.getService(context, requestCode, intent,
                            PendingIntent.FLAG_CANCEL_CURRENT);
//or use PendingIntent.getBroadcast if you're gonna use a broadcast

                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), mAlarmSender); // date.getTime to get millis if using Date directly. 

電話を再起動してもこれらのアラームを正しく機能させるには、次を追加します。

        <action android:name="android.intent.action.BOOT_COMPLETED"/>

マニフェストのReceiverのintentfilterとして、onReceiveでアラームを再作成します。

編集

アプリケーションでBroadcastReceiverを作成すると、システムでブロードキャストを受信するという、まさにそのように聞こえる操作を実行できます。たとえば、BroadcastReceiverは次のようになります。

public class MyAwesomeBroadcastReceiver extends BroadcastReceiver {

//since BroadcastReceiver is an abstract class, you must override the following:

    public void onReceive(Context context, Intent intent) {
       //this method gets called when this class receives a broadcast
    }
}

このクラスにブロードキャストを明示的に送信するには、マニフェスト内で次のようにレシーバーを定義します。

<receiver android:name="com.foo.bar.MyAwesomeBroadcastReceiver" android:enabled="true" android:exported="false">
            <intent-filter>

                <action android:name="SOME_AWESOME_TRIGGER_WORD"/>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>




            </intent-filter>
        </receiver>

これをマニフェストに含めると、2つのことが得られます。必要なときにいつでも受信者にブロードキャストを明示的に送信できます。

Intent i = new Intent("SOME_AWESOME_TRIGGER_WORD");
                sendBroadcast(intent);

また、システムによってブロードキャストされるBOOT_COMPLETEDアクションを受信するようにAndroidに指示したため、それが発生するとレシーバーも呼び出されます。

于 2012-07-06T03:09:09.463 に答える
2

AlarmManagerの使用がベストプラクティスです。

于 2012-07-06T02:57:17.940 に答える
1

これがあなたができることです:

  1. 保留中のインテントをService介して起動し、そのサービスでコードを記述します。AlarmManager'sNotification

  2. データベースを使用してすべてを保存し、をAlarms使用してデバイスの再起動時にそれらを再スケジュールしますBOOT_COMPLETED Broadcast reciver

于 2012-07-06T05:12:05.287 に答える