1

Alarm Manager Broadcast wird bei einigen Geräten nicht empfangen, wenn die App nicht im Speicher ist (aus dem App-Tray gezogen). Gerät, auf dem es nicht funktioniert, läuft mit API 25 und ist ONE PLUS 3-Gerät. Das Gleiche funktioniert jedoch in Nexus 6 (mit API 25).Alarm Manager Broadcast nicht empfangen, wenn App nicht im Speicher ist (One Plus 3)

Seltsame Sache ist, kann ich in Systemprotokollen sehen, dass Alarm ausgelöst wird. Ich kann Protokoll unten sehen, wenn der Alarm ausgelöst werden soll. Nur dass BroadCast nicht empfangen wird. Dies geschieht wiederum nur, wenn die App nicht im Speicher ist. Broadcast wird ordnungsgemäß empfangen, wenn sich die App im Speicher befindet.

V/AlarmManager: Triggering alarm #0: 0 when =1508843147121 package=net.IntAppoperation =*walarm*:com.intapp.receivers.NOTIFICATION_ALARM

Hier ist, wie ich Weckeinstellung bin

In Manifest:

<receiver android:name="com.intapp.receivers.ReminderReceiver" 
       android:exported="false" 
       android:enabled="true"> 
     <intent-filter> 
      <action android:name="com.intapp.receivers.NOTIFICATION_ALARM" /> 
     </intent-filter> 
</receiver> 

Und wenn ich dann Alarm einstellen möchten:

public static final String ACTION = "com.intapp.receivers.NOTIFICATION_ALARM"; 

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(context, ReminderReceiver.class); 
intent.setAction(ACTION); 
int randomNum = new Random().nextInt(Integer.MAX_VALUE - 1 + 1); 
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, randomNum, intent, PendingIntent.FLAG_ONE_SHOT); 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent); // I get time from calendar instance in my function 
    } else { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
       alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent); 
      } else { 
       alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent); 
      } 
} 

Hier meine Implementierung ist des Empfängers:

public class ReminderReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "Receiver called "); 
     // my implementation 
    } 
} 

EDIT:

wie Problem scheint, ist ein wenig größer. Ich habe mich auch für CALL_STATE registriert, mit dem ich eingehende/ausgehende Anrufe hören kann. Dieser Broadcast-Empfänger wird auch nicht ausgelöst, wenn sich die App nicht im Speicher befindet. Plus, passiert dies auf Samsung Gerät auch auf API 25. Ist dies (Manifest Broadcast nicht funktioniert) bekanntes Problem für API 25 auf einigen Geräten?

Antwort

0

Ich habe auch eine OnePlus 3 ... Und das passiert mir auch sehr. Auch wenn ich mich für eine BootReceiver registriere. Ich habe mein Problem behoben, indem ich meine Anwendung deinstalliert und neu installiert habe.

Ich würde vorschlagen, eine WakeLock in Ihrem Application zu implementieren, um zu verhindern, dass das Gerät Ihre App zu töten, so dass die BroadcastReceiver bleibt aktiv.

Hoffen wir, dass OnePlus es in Zukunft besser machen wird.

Verwandte Themen