2010-03-09 3 views
3

J'ai un service qui peut théoriquement fonctionner sans activité associée (comme "services" sont prévus sur la plate-forme Android).Android Bluetooth à partir du service

Ce service utilise Bluetooth, en particulier enregistre un service Bluetooth avec un nom donné qui écoute les communications. Bien sûr, pour fonctionner, le Bluetooth doit être actif.

Comme également indiqué sur les documents api Bluetooth j'utilise le BluetoothAdapter.ACTION_REQUEST_ENABLE pour inviter l'utilisateur à activer Bluetooth au cas où il n'est pas déjà allumé. Ceci, cependant, est une activité, et doit donc être appelé à partir d'une autre activité, à savoir:

Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
InstanceOfAnActivity.startActivity(enableIntent); 

Ce que je voudrais obtenir est d'avoir le service (qui, par exemple, démarre au démarrage), complètement découplé de toute activité, et n'aura donc pas le InstanceOfAnActivity pour démarrer le pop-up demandant à l'utilisateur d'activer Bluetooth.

Maintenant, je sais qu'il ya l'appel (infâme) à BluetoothAdapter.enable(), mais comme le doc dit qu'il ne devrait pas être appelé directement.

Donc, une astuce/solution à ce dilemme? (Peut-être qu'il est facile et je manque juste quelque chose ...)

+0

Il est quelques mois plus tard maintenant et je me demande si vous étiez en mesure de surmonter ce problème? –

+0

Comment "beaux widgets" pour activer le bluetooth sans la permission de l'utilisateur? – Pachanka

Répondre

2

Voici ce que dit le document

Bluetooth ne doit jamais être activé sans le consentement de l'utilisateur direct. Si vous souhaitez activer Bluetooth pour créer une connexion sans fil, vous devez utiliser le message ACTION_REQUEST_ENABLE Intent, qui déclenche une boîte de dialogue demandant à l'utilisateur d'activer Bluetooth. La méthode enable() est fournie uniquement pour les applications qui incluent une interface utilisateur permettant de modifier les paramètres du système, telle qu'une application «gestionnaire d'alimentation».

Notez qu'il ne dit pas pas d'appeler directement BluetoothAdapter.enable(), il dit seulement appeler si vous avez obtenu le ok de l'utilisateur. Cela signifie que vous auriez besoin d'un écran de configuration qui demandait à l'utilisateur si votre service pouvait allumer le bluetooth et ainsi contrôler le fonctionnement.

4

startActivity() n'est pas strictement une méthode d'activité - c'est une méthode de contexte, héritée par l'activité et Service. Cependant, comme indiqué dans le doc Service.startActivity(), "si cette méthode est appelée depuis l'extérieur d'un contexte d'activité, l'intention doit inclure l'indicateur de lancement FLAG_ACTIVITY_NEW_TASK".

Ainsi, avec « contexte » lié à l'instance de service, ce qui suit devrait fonctionner:

Intent btIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
btIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(btIntent); 
+0

Comment puis-je gérer le résultat de l'activité? – dnkilic