плагин cordova для Android — службы привязки

#android #cordova #android-service #cordova-plugins

#Android #кордова #android-сервис #cordova-плагины

Вопрос:

Я создаю приложение cordova для Android, которому необходимо привязать сервис. Я добавил следующую запись в manifest.xml

 <service android:name="com.viatom.azur.BTUtils">
    <intent-filter>
        <action android:name="com.viatom.azur.BTUtils" />
    </intent-filter>
</service>
  

И попробуйте связать его со следующим машинным кодом:

   private ServiceConnection conn = new ServiceConnection(){
     @Override
        public void onServiceConnected(ComponentName name, IBinder service){
        mBinder = (BTUtils.BTBinder) service;
        System.out.println("Service bound");
     }

     @Override
     public void onServiceDisconnected (ComponentName name){
        System.out.println("Service has been disconnected.");
     }
 };

public String testBindService(){

        Intent intent = new Intent("com.viatom.azur.BTUtils");
        intent.setPackage("com.viatom.azure");
        cordova.getActivity().getApplicationContext().bindService(intent, conn, Service.BIND_AUTO_CREATE);
        return "Hello";


}
  

Однако каждый раз, когда я пытаюсь получить доступ к mBinder в другое время в приложении, mBinder равен нулю. Итак, у меня есть несколько вопросов:

  • Во время возврата функции «testBindService» она запускает обратный вызовcontext.success. Я читал, что любые связанные службы будут развязаны, когда контекст будет уничтожен. означает ли это, что если я свяжу свой сервис на шаге a, а затем запущу шаг b из моего интерфейса javascript, mBinder уже будет не привязан?
  • Есть ли способ запретить моей родной стороне плагина cordova возвращать что-либо, пока служба не будет привязана?

Я думаю, проблема в том, что метод onserviceconnected никогда не достигается, потому что метод execute плагина cordova возвращается до привязки сервиса. (я читал, что метод bindService является асинхронным)

будем признательны за любые советы.

Комментарии:

1. что bindService возвращает?

2. Согласно документу: привязка является асинхронной. bindService() возвращает немедленно и не возвращает IBinder клиенту. Чтобы получить IBinder, клиент должен создать экземпляр ServiceConnection и передать его в bindService(). ServiceConnection включает в себя метод обратного вызова, который система вызывает для доставки IBinder. В моей конкретной реализации bindservice должен возвращать экземпляр моего интерфейса службы после запуска метода on service connected.

3. итак, что означает ваш призыв к bindService возврату? правда или ложь? если false, попробуйте intent.setPackage("com.viatom.azur");

4. @pskink Возвращает false, но я уже это сделал 🙂 смотрите приведенный выше код в методе testBindService.

5. не «com.viatom.azure», а «com.viatom.azur»