Android Bluetooth à partir de l'intérieur du Service
J'ai un service qui, théoriquement, ne peut fonctionner sans une Activité associée à elle (en tant que "services" sont destinés à la plate-forme Android).
Ce service utilise la technologie Bluetooth, en particulier les registres d'un Service Bluetooth avec un Nom donné à l'écoute pour les communications. De cours de travail, il doit avoir le Bluetooth activé.
Ainsi qu'il est indiqué sur le Bluetooth de l'api docs je suis en utilisant le BluetoothAdapter.ACTION_REQUEST_ENABLE
pour inviter l'utilisateur à activer le Bluetooth dans le cas où il n'est pas déjà fait. Ceci, cependant, est une activité, et doit donc être appelée à partir d'une autre activité, c'est à dire:
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
InstanceOfAnActivity.startActivity(enableIntent);
Ce que je veux réaliser est d'avoir le service (qui, par exemple, démarre au démarrage), complètement découplé de toute Activité, et, par conséquent, n'aurait pas le InstanceOfAnActivity
pour le démarrage de la pop-up demandant à l'utilisateur d'activer le Bluetooth.
Maintenant, je sais qu'il y a le (tristement célèbre) appel à BluetoothAdapter.enable()
, mais le doc a dit que ça ne devrait pas être appelée directement.
Toute l'astuce/solution à ce dilemme? (C'est peut-être facile et je suis juste en manque de quelque chose...)
Comment la "Beautiful widgets" pour activer bluetooth sans autorisation de l'utilisateur ?
OriginalL'auteur cloud | 2010-03-09
Vous devez vous connecter pour publier un commentaire.
startActivity()
n'est pas strictement une Activité de méthode - c'est un Contexte méthode, héritée par l'Activité et Service.Il est une chose d'être conscient de, si - comme il est indiqué dans le
Service.startActivity()
doc, "si cette méthode est appelée hors d'un Contexte d'Activité, alors l'Intention doit comprendre lesFLAG_ACTIVITY_NEW_TASK
lancer de drapeau".Ainsi, avec le "contexte" lié à l'instance de Service, la suivante devrait fonctionner:
OriginalL'auteur EarlMagnus
Voici ce que le doc a dit
Notez qu'il ne dit pas pas appeler
BluetoothAdapter.enable()
directement, il dit seulement à l'appeler si vous avez obtenu l'accord de l'utilisateur. Ce qui signifie que vous besoin d'un écran de configuration qui demande à l'utilisateur si il était ok pour que votre service pour activer bluetooth et de cette façon, ils pourraient avoir le contrôle.OriginalL'auteur CaseyB