Questo è il mio codice Activity
,Alarm Manager non funziona in background su Android 6.0
Long time = new GregorianCalendar().getTimeInMillis()+20000;//Setting alarm after 20 sec
Intent intentAlarm = new Intent("alarm");
intentAlarm.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intentAlarm.putExtra("req_code",10);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,10, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
Queste sono tutte le autorizzazioni che ho nella mia app,
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="com.myapp.pack.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Questo è il mio codice BroadcastReceiver
,
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPreferences =
context.getSharedPreferences("mydata", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("elligible",true);
editor.apply();
}
ho registrato il mio BroadcastReceiver
nel manifesto,
<receiver android:name="com.myapp.pack.AlarmReciever" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="alarm" />
</intent-filter>
</receiver>
Il codice di cui sopra esegue con successo il BroadcastReceiver
su dispositivi pre-marshmallow sullo sfondo, ma su un dispositivo Marshmallow, il BroadcastReceiver
non viene eseguito. Qualcuno sa cosa potrebbe accadere qui? Grazie.
Quindi, se uso 'setExactAndAllowWhileIdle()' dovrò cambiare la versione minima sdk della mia app a 23? –
Grazie amico! you rock :) –
'setExact()' è disponibile solo dall'API 19. Quindi devi farlo anche in'else if' nella condizione nello snippet. – Henry