web-dev-qa-db-ja.com

再起動後もAlarm Managerは持続しますか?

私はAndroidが初めてで、アラームについて研究しています。その日に誕生日が来たら警告したい。アラームマネージャーを使用しました。再起動後にクリアされることを読んだため、混乱しました。 Android電話がないので、エミュレータを使用しています。

これが私のコードです:

public void schedAlarm() {
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    Intent intent = new Intent(this, AlarmService.class);
    pendingIntent = PendingIntent.getBroadcast(this, contact.id, intent, PendingIntent.FLAG_ONE_SHOT);
    am.setRepeating(AlarmManager.RTC, timetoAlarm, nextalarm, pendingIntent);
}

AlarmSerivceの代わりにこのBroadcastReceverを作成しました。

public void onReceive(Context context, Intent intent) {
    nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    CharSequence from = "It Birthday!";
    CharSequence message =" Greet your friend.";
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(), 0);
    Notification notif = new Notification(R.drawable.ic_launcher, "Birthday", System.currentTimeMillis());
    notif.setLatestEventInfo(context, from, message, contentIntent);
    nm.notify(1, notif);
 }

これで十分ですか??

46
Xelamae

簡単な答えは[〜#〜] no [〜#〜]です。ただし、デバイスの起動完了時にアラームを開始するBroadCastReceiverを作成することで、これを実現できます。

使用する <action Android:name="Android.intent.action.BOOT_COMPLETED" /> BroadCastReceiverクラスでブートアクティビティをトラップします。

次のようにAndroidManifest.xmlに上記の行を追加する必要があります。

<receiver Android:name=".AutoStartUp" Android:enabled="true" Android:exported="false" Android:permission="Android.permission.RECEIVE_BOOT_COMPLETED">
     <intent-filter>
        <action Android:name="Android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
    </receiver>
84
Lucifer

はい、再起動後でもAlarmManagerを動作させることができます。おそらくこれが最も簡単な方法です:AndroidManifest.xmlに以下のコードを追加します。

<receiver Android:name=".AlarmReceiver">
        <intent-filter>
            <action Android:name="Android.intent.action.BOOT_COMPLETED" />
            <action Android:name="Android.intent.action.QUICKBOOT_POWERON" />

            <category Android:name="Android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

androidManifest.xmlへのユーザー許可を次のように含めることを忘れないでください。

<uses-permission Android:name="Android.permission.RECEIVE_BOOT_COMPLETED"/>
5

一部の電話では追加のみ

<action Android:name="Android.intent.action.Boot_COMPLETED" />

動作しませんあなたも追加する必要があります

<action Android:name="Android.intent.action.QUICKBOOT_POWERON" />

前のものと一緒に

1
Romy Gomes