Comment faire de l'application du récepteur de radiodiffusion de rester à l'écoute sans avoir un service qui s'exécute en arrière-plan
Je suis en train de faire une application android qui est à l'écoute wifi, changement de radiodiffusion et de faire une certaine action. Mais le problème est qu'il ne fonctionne pas lorsque le processus est tué. J'ai trouvé cette question, qui a dit qu'il ne fonctionnera pas sans une activité
Comment créer BroadcastReceiver sans Activité/Service?
Ce n'est donc pas une alternative. Donc j'ai créé une activité qui est vide. Je ne veux pas créer un service qui maintient en cours d'exécution en arrière-plan. Comment puis-je faire ma demande de rester à l'écoute, même quand il est tué. J'ai enregistré l'émission dans le manifeste.
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.background.service.BroadCastReceiver">
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
C'est ma classe
public class BroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//do some action
}
}
Service pour quoi ? En vous inscrivant dans le Manifeste est assez.
Eh bien, la
Comment tuer l'application? Pouvez-vous mentionner les étapes?
"Utilisé une pré-installation d'une application pour tuer tous les processus en cours d'exécution" -- utiliser une technique plus fiable, tel que la résiliation de votre processus via DDMS. Il se peut que votre appareil est en train de faire une halte pour ces processus, qui serait epically stupide, mais il arrive avec certains appareils. Au-delà, ce qui vous aide à déterminer si votre
J'ai réussi à trouver le pourquoi et le comment reproduire le problème que je vois. C'est parce que je suis le débogage de l'application. Lorsque le débogueur est attaché, la suppression de l'application à partir de l'écran de synthèse de fait déplacer pour "Forcer l'Arrêt" état (confirmé en allant dans Paramètres > app et de voir que "Forcer l'Arrêt" de bouton est désactivé) chaque fois unique. Se produit à la fois dans l'émulateur et le réel de l'appareil. L'exécution de l'application sans attacher le débogueur n'avons pas de problèmes 🙂 j'Espère que cette info vous aide à quelqu'un!
Eh bien, la
onReceive
n'est pas appelée lorsque l'application est tuéComment tuer l'application? Pouvez-vous mentionner les étapes?
"Utilisé une pré-installation d'une application pour tuer tous les processus en cours d'exécution" -- utiliser une technique plus fiable, tel que la résiliation de votre processus via DDMS. Il se peut que votre appareil est en train de faire une halte pour ces processus, qui serait epically stupide, mais il arrive avec certains appareils. Au-delà, ce qui vous aide à déterminer si votre
BroadCastReceiver
est d'obtenir le contrôle? Aussi, avez-vous lancé cette activité au moins une fois depuis que vous avez installé l'application? Sans cela, manifeste-enregistré les récepteurs ne fonctionnent pas (ils sont dans le même "arrêté" de l'état que d'une force d'arrêt).J'ai réussi à trouver le pourquoi et le comment reproduire le problème que je vois. C'est parce que je suis le débogage de l'application. Lorsque le débogueur est attaché, la suppression de l'application à partir de l'écran de synthèse de fait déplacer pour "Forcer l'Arrêt" état (confirmé en allant dans Paramètres > app et de voir que "Forcer l'Arrêt" de bouton est désactivé) chaque fois unique. Se produit à la fois dans l'émulateur et le réel de l'appareil. L'exécution de l'application sans attacher le débogueur n'avons pas de problèmes 🙂 j'Espère que cette info vous aide à quelqu'un!
OriginalL'auteur Alex | 2014-11-26
Vous devez vous connecter pour publier un commentaire.
Semble que vous avez-il correct de définir dans le manifeste, à une exception près. Le récepteur de radiodiffusion sera le déclencheur d'une ANR si elle n'est pas effectuée dans les 10 secondes. http://developer.android.com/training/articles/perf-anr.html
dans votre récepteur de radiodiffusion simplement démarrer un service.
Puis dans votre service de démarrer une asynctask parce que vous ne voulez pas être sur le thread de l'INTERFACE utilisateur, par exemple, vous démarrez le même service à partir d'une activité dans votre application.
Première chose à faire dans l'asynctask est de vérifier pour le wifi
Ci-dessous est extrait à partir d'une fonction que j'appelle pour vérifier réseau si elle retourne false, le asynctask juste finitions si c'est vrai, il n'réseau des trucs qui hey doit être à l'arrière-plan de toute façon donc asynctask plus en plus de sens.
Remarque dans cet exemple, le startId passé à l'asynctask est utilisé pour annuler les OS restitution simultanée de l'intention.
OriginalL'auteur danny117
Le meilleur qui a fonctionné pour moi:
AndroidManifest
BroadcastReceiver classe
Autorisations
OriginalL'auteur Elango
meilleure solution est de faire un récepteur de radiodiffusion , il va travailler
dans manifest.xml
OriginalL'auteur lalit vasan
Vous déjà en train de faire avec le Récepteur de Radiodiffusion, et en déclarant qu'il le Manifeste. C'est tout ce que vous devez faire. Pas de services en cours d'exécution en arrière-plan sont nécessaires.
Assurez-vous installer et exécuter l'application au moins une fois sinon, l'émission reçoit ne sera pas enregistré
OriginalL'auteur João Alves
Normalement, si l'application est tué et la diffusion de votre app processus sera lancé par le système pour vous. Il n'y a absolument pas besoin de tenir quelque chose de vivant ou de faire toute manipulation supplémentaire (sinon, pourquoi auriez-vous besoin
BroadcastReceiver
si vous pouvez simplement utiliserService
?)OriginalL'auteur Dmitry Zaytsev