Partage
  • Partager sur Facebook
  • Partager sur Twitter

[android] Bound service entre deux applications

    22 août 2019 à 11:33:52

    Bonjour à tous,

    Je suis entrain de suivre le tuto "Créez des applications pour Android" Et il y a un passage que je ne comprend pas trop.

    Dans le chapitre "Les services", il est dit au début : "Il est aussi possible qu'un service soit lancé par un composant qui appartient à une autre application, auquel cas il s'agit d'un service distant (on trouve aussi le terme boundservice)." (https://openclassrooms.com/fr/courses/2023346-creez-des-applications-pour-android/2027704-les-services#/id/r-2033441)


    Ce que je comprend de cette phrase, est qu'il est possible d'avoir une application A qui porte un service, et une autre application B qui peut appeler ce service. (Si je me trompe là dites le moi tout de suite ^^).

    Un peu plus loin dans le cours, il y a "une implémentation typique d'un service distant :" (https://openclassrooms.com/fr/courses/2023346-creez-des-applications-pour-android/2027704-les-services#/id/r-2033510)

    // Retient l'état de la connexion avec le service
    private boolean mBound = false;
    // Le service en lui-même
    private MonService mService;
    // Interface de connexion au service
    private ServiceConnection mConnexion = new ServiceConnection() {
      // Se déclenche quand l'activité se connecte au service
      public void onServiceConnected(ComponentName className, IBinder service) {
        mService = ((MonService.MonBinder)service).getService();
      }
    
      // Se déclenche dès que le service est déconnecté
      public void onServiceDisconnected(ComponentName className) {
        mService = null;
      }
    };
    
    @Override
    protected void onStart() {
      super.onStart();
      Intent mIntent = new Intent(this, MonService.class);
      bindService(mIntent, mConnexion, BIND_AUTO_CREATE);
      mBound = true;
    }
    
    @Override
    protected void onStop() {
      super.onStop();
      if(mBound) {
        unbindService(mConnexion);
        mBound = false;
      }
    }
    

    Donc pour reprendre mon exemple, il s'agirait de l'application B, celle qui veut appeler le service.

    Ce que ne comprend pas, c'est comment faire pour utiliser ce service directement, alors que l'on est pas dans la même application. Autrement dit, comment importer la classe MonService, qui est dans l'application A, depuis mon application B :

    // Le service en lui-même
    private MonService mService;

    Je me pose peut-être les mauvaises questions, et je tourne en rond...

    Peut-être que j'ai mal compris la première phrase, et qu'il est impossible de faire cela ?

    Sans rentrer dans les détails, mais pour expliquer mon contexte, mon service doit absolument se trouver dans une autre application que l'application principal (application B) pour des raisons de permission (utilisation de android.permission.WRITE_SETTINGS).

    En fait, il s'agit d'une application professionnel, où je maîtrise les devices, et le service fait des choses qui m'oblige a installer l'application en tant que "system app" (dans /system/priv-app). Le problème, est que je ne voudrais pas avoir a installer l'application principal dans /system/priv-app pour diverse raisons.

    J'espère que quelqu'un pourra peut-être répondre à ma question, ou m'aiguiller sur une autre méthode pour résoudre ma problématique.

    En vous remerciant par avance.

    edit: reformulation, orthographe

    -
    Edité par TimothéTizio-Menut 22 août 2019 à 11:36:59

    • Partager sur Facebook
    • Partager sur Twitter

    [android] Bound service entre deux applications

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown