Ich versuche einen Alarm einzurichten, der eingeschaltet bleibt, weil ich möchte, dass er in 3 Tagen ausgeht und ich weiß, dass Android meine App vorher beenden wird.Persistenter Alarm
In meiner Tätigkeit
private void setAlarm() {
//ContactAlarmReceiver contactAlarmReceiver = new ContactAlarmReceiver();
//contactAlarmReceiver.setAlarm(getApplicationContext(), dateInMillis, phonenumberET.getText().toString(), firstnameET.getText().toString());
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(MyConstants.BROADCAST_ACTION_CONTACT_ALARM);
alarmIntent.putExtra("phone", phonenumberET.getText().toString());
alarmIntent.putExtra("name", firstnameET.getText().toString());
PendingIntent pi = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
//am.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timeInMills, pi);
if (Build.VERSION.SDK_INT >= 23) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, dateInMillis, pi);
} else if (Build.VERSION.SDK_INT >= 19) {
am.setExact(AlarmManager.RTC_WAKEUP, dateInMillis, pi);
} else {
am.set(AlarmManager.RTC_WAKEUP, dateInMillis, pi);
}
ComponentName component = new ComponentName(this, ContactAlarmReceiver.class);
getPackageManager()
.setComponentEnabledSetting(component,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
Manifest:
<receiver
android:name=".ContactAlarmReceiver"
android:enabled="false">
<intent-filter>
<action android:name="com.example.johnbravado.CONTACTALARM" />
<action android:name="com.example.johnbravado.NOTIFLTBTN" />
<action android:name="com.example.johnbravado.NOTIFRTBTN" />
</intent-filter>
</receiver>
ContactAlarmReceiver:
@Override
@Override
public void onReceive(Context context, Intent intent) {
PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"com.example.johnbravado.zionwork");
wakeLock.acquire();
final NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Bundle extras = intent.getExtras();
ComponentName receiver = new ComponentName(context, ContactAlarmReceiver.class);
PackageManager pm = context.getPackageManager();
if (intent.getAction().equals(MyConstants.BROADCAST_ACTION_CONTACT_ALARM)) {
int count = extras.size();
String num = extras.getString("phone");
String name = extras.getString("name");
sendContactNotification(context, MyConstants.BIG_NOTIFICATION_ID, num, name);
}
if (intent.getAction().equals(MyConstants.BROADCAST_ACTION_NOTIF_LTBTN)) {
sendSMS(context, extras.getString("phone"), extras.getString("msg"));
mNotificationManager.cancel(MyConstants.BIG_NOTIFICATION_ID);
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
if (intent.getAction().equals(MyConstants.BROADCAST_ACTION_NOTIF_RTBTN)) {
initiatePhone(context, intent.getExtras().getString("phone"));
mNotificationManager.cancel(MyConstants.BIG_NOTIFICATION_ID);
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
wakeLock.release();
}
ich nie die Meldung nach längerer Zeit erhalten. Zum Beispiel habe ich den Wecker um 23 Uhr für 3 Uhr morgens gestellt, also sollte ich nach dem Aufwachen die Benachrichtigung sehen. Aber es wird keine Benachrichtigung angezeigt.
'ContactAlarmService' scheint ein' Service' zu sein, aber Sie verwenden einen 'PendingIntent', der eine Broadcast sendet,' PendingIntent.getBroadcast() '. –
und die ausstehende Absicht, die ich auslösen möchte, wenn der Alarm ausgelöst wird, ist eine Übertragung. –
Dann brauchen Sie eine 'BroadcastReceiver' Klasse als Ziel; wahrscheinlich speziell ein 'WakefulBroadcastReceiver'. Dann starte deinen 'Service' daraus. –