Android: -Le gestionnaire d'alarme ne fonctionne pas
-
29-10-2019 - |
Question
Dans mon code, le gestionnaire d'alarmes ne fonctionne pas.Le reste de mon application fonctionne bien.Veuillez consulter mon code.
Intent myIntent = new Intent(getApplicationContext(), AndroidAlarmService.class);
myIntent.putExtra("class", "home");
PendingIntent pendingIntent = PendingIntent.getService(this, 0,myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),6000,pendingIntent);
et ma classe Android AlarmService: -
public class AndroidAlarmService extends BroadcastReceiver implements URLs{
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("BroadCast\n");
String name=intent.getStringExtra("class");
if(name.equals("home")){
Intent homeIn=new Intent(context,Home.class);
context.startActivity(homeIn);
}
}
}
dans le manifeste, j'ai fait ceci;
<receiver android:name=".AndroidAlarmService" android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"></action>
</intent-filter>
</receiver>
Pourquoi ça ne marche pas ??
La solution
J'ai eu la réponse, j'ai apporté les modifications suivantes:
Intent myIntent = new Intent(getApplicationContext(), AndroidAlarmService.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,myIntent, 0);
Dans ma classe AndroidAlarmService:
Intent homeIn=new Intent(context,Home.class);
homeIn.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(homeIn);
Autres conseils
J'ai eu le même problème jusqu'à ce que je découvre que j'avais placé mon récepteur de diffusion sur un package différent, pas le général.
Simplement changé:
<receiver android:name=".AndroidAlarmService" android:enabled="true" >
pour:
<receiver android:name="com.MyCompany.MyPackage.AndroidAlarmService" android:enabled="true" >
Avez-vous essayé de changer le
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),6000,pendingIntent);
Avez-vous essayé de changer le 6000 en autre chose?Il semble que tout le reste soit correct.
MODIFIER:
Assurez-vous que vous disposez de l'autorisation Read_phone_state dans votre manifeste.