J'essaie de démarrer automatiquement mon application Nightclock sur la charge en utilisant le BroadcastReceiver suivant implémenté dans la méthode onPause ():
BroadcastReceiver test = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
unregisterReceiver(this);
Intent i = new Intent(context, NightClock.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
};
registerReceiver(test, new IntentFilter(Intent.ACTION_POWER_CONNECTED));
La méthode onReceive () est déclenchée lorsque le câble USB est branché, mais l'activité ne démarre pas. Cependant, le journal montre ceci:
I/ActivityManager( 79): Starting activity: Intent { flg=0x10000000 cmp=com.meins.nightclock/.NightClock }
Des idées pour lesquelles le journal indique que l'activité a commencé, mais rien ne se passe?
Si votre objectif est que vous souhaitiez que NightClock
soit lancé chaque fois qu'une diffusion ACTION_POWER_CONNECTED
Est envoyée, votre approche de l'utilisation d'un BroadcastReceiver
est correcte. Cependant, ne l'enregistrez pas à partir d'une activité. Enregistrez-le plutôt dans le manifeste:
<receiver Android:name=".OnPowerReceiver">
<intent-filter>
<action Android:name="Android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>
Ensuite, ayez votre BroadcastReceiver
en tant que public Java (ici nommée OnPowerReceiver
, bien que vous puissiez l'appeler comme vous voulez), et faites-la appeler startActivity()
.
Gardez à l'esprit que les utilisateurs ne veulent probablement pas que vous le fassiez. Il existe de nombreux autres cas pour connecter un téléphone à l'alimentation en plus de démarrer une "horloge de nuit". Je vous suggère humblement de simplement laisser les utilisateurs démarrer votre activité via l'écran d'accueil.
Vous avez passé le contexte en tant que paramètre à la méthode onRecieve (), alors utilisez simplement:
@Override
public void onReceive(Context context, Intent intent) {
//start activity
Intent i = new Intent();
i.setClassName("com.test", "com.test.MainActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
Cela fonctionne, bien sûr, vous devez changer le nom du package et de la classe d'activité en votre propre nom.