Ich habe in dieser Situation für eine lange Zeit stecken geblieben ...Alarm Manager werden nicht funktionieren, wenn die App im Hintergrund getötet und Gerät gesperrt ist
Ich mag den Alarmmanager verwenden, um Benachrichtigungen zu zeigen, bei die spezifische Zeit, und jetzt hat es in der folgenden Situation funktioniert:
- Wenn die App im Hintergrund ausgeführt wird, wird die Benachrichtigung zur richtigen Zeit angezeigt, und egal, das Gerät gesperrt ist oder nicht.
- nachdem die App im Hintergrund getötet wurde, werde ich immer noch korrekte Benachrichtigung erhalten, wenn das Gerät nicht gesperrt ist, aber Dinge werden falsch, wenn das Gerät gesperrt ist, kann ich keine Benachrichtigung erhalten.
@Override public void onReceive(Context context, Intent intent) { WakeLocker.acquire(context); String action = intent.getAction(); Log.d(TAG, action); //when app is killed and device is locked, no info is shown at the logcat if (ACTION_ALARM.equals(action)) { Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(2 * 1000); notify(context, "Jello!"); } WakeLocker.release(); } public static void alarm(Context context) { AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmReceiver.class); intent.setAction(ACTION_ALARM); PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 5 * 1000, pi); } else { alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 5 * 1000, pi); } } private void notify(Context context, String msg) { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(context, InfoActivity.class), 0); Notification notification = new NotificationCompat.Builder(context) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle(context.getString(R.string.alarm)) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setContentText(msg) .setAutoCancel(true) .setContentIntent(contentIntent).build(); notificationManager.notify(1, notification); }
Berechtigungen hinzugefügt:
Hier den Code AlarmReceiver.java, alle benötigten Erlaubnis in AndroidManifest.xml wurde bereits hinzugefügt
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.VIBRATE"/>
Haben Sie die richtigen Berechtigungen festgelegt? – NilayDani