2016-06-14 3 views
-3

Comment puis-je obtenir une activité en cours/en cours d'exécution à partir du service Android? Je travaille sur Screen Locker et j'ai besoin de getActivity() et getWindow() pour que getDecorView() rende la barre de navigation cachée. Si quelqu'un connaît mieux la solution, s'il vous plaît commenter. Merci!getActivity() via le service Android

+0

getActivity(). Votre question est auto-répondu. Avez-vous eu des problèmes avec ça? –

+0

Méthode getActivity() n'est pas accessible dans une classe qui étend le service – jelic98

Répondre

1

Il n'y a aucun moyen d'obtenir une référence à l'activité autant que je sache. Une approche classique pour communiquer entre un service et une activité consiste à utiliser un BroadcastReceiver.

Voici un exemple:

sur votre activité vous pouvez créer une classe interne qui s'étend BroadcastReceiver:

private class ServiceReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context arg0, Intent arg1) { 

      if (arg1.hasExtra(Constants.SOME_ACTION)) { 
       //DO YOUR THING 
      } 
     } 

    } 

Ne pas oublier de vous inscrire sur onCreate:

serviceReceiver = new ServiceReceiver(); 
IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(Constants.SERVICE_RECEIVER); 
registerReceiver(serviceReceiver, intentFilter); 

et pour le désinscrire sur onPause()

if (serviceReceiver != null) 
      unregisterReceiver(serviceReceiver); 

Ensuite, à partir de votre service, vous pouvez envoyer une diffusion sur un événement, quelque chose comme ceci:

Intent intent = new Intent(); 
          intent.setAction(Constants.SERVICE_RECEIVER); 
          intent.putExtra(Constants.SOME_ACTION, true); 
          sendBroadcast(intent); 

De cette façon, votre activité peut réagir aux événements sur votre service.

+0

Je viens de lire quelque chose à propos de BroadcasstReceivers, mais comment puis-je l'utiliser getActivity()? – jelic98

+0

Merci beaucoup, mais le problème est que je n'ai pas d'activité. Je construis le bloqueur de contact qui couvre l'écran avec la vue faite sur commande et bloque les boutons de navigation. J'ai terminé la tâche de couverture de l'écran de sorte que tout ce qui reste est de bloquer les boutons de navigation et possibli masquer la barre d'état. Mon service doit être capable d'écouter l'utilisateur au-dessus de chaque activité. Il existe des applications similaires sur google play store, vous pouvez donc les consulter pour voir de quoi je parle. Merci encore pour votre temps. – jelic98