onServiceConnected () не вызывается - PullRequest
17 голосов
/ 24 октября 2011

У меня проблема с использованием фонового сервиса.
Я пользуюсь сервисом из 2 видов деятельности.

Первое действие начинается с Service с startService(intent) и связывается с ним с bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

Это прекрасно работает, и я могу отправить Message в onServiceConnected().

Второе действие связывается только с Service (поскольку оно уже началось), снова используя bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

Теперь вот моя проблема:
Во втором упражнении у меня есть Button, который должен использовать сервис, когда я нажимаю на него.
Тем не менее, onServiceConnected() никогда не вызывается в этом упражнении, поэтому я не могу получить связыватель для создания Messenger для отправки Message на сервер.

Кто-нибудь знает, когда точно вызывается onServiceConnected() или чего он, возможно, ждет?
Или, может быть, что-то еще, чтобы решить эту проблему?

РЕДАКТИРОВАТЬ: bindService возвращает false, что может вызвать это?

Заранее спасибо

Ответы [ 7 ]

26 голосов
/ 25 октября 2011

После еще одного исследования я обнаружил, что это известная проблема в Android.

Вторым действием, о котором я говорил, было действие, которое используется в качестве контента в TabActivity.

* 1005.* Чтобы исправить это, нужно было вызвать bindService(...) в контексте приложения, а не в контексте действия, используя getApplicationContext().bindService(...)
19 голосов
/ 28 октября 2013

Вам необходимо добавить:

<service android:name="package.path.to.your.service.class" android:enabled="true"></service>

в файл манифеста Android.

9 голосов
/ 03 июня 2013

Добавить связку в манифест ..

 <service
            android:name=".MyAccessibilityService"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>

</service>

MyAccessibilityService название вашей службы.

7 голосов
/ 30 октября 2015

Это случилось со мной только сейчас.
Не забудьте создать экземпляр класса binder до возврата onbind. Глупая ошибка, но это случается. надеюсь, это поможет кому-то в будущем.

private YourBinder thisBinder;

oncreate
{
  thisBinder = new YourBinder(); //don't forget this.
}


public class YourBinder extends Binder
{

}

public IBinder onBind(Intent intent) 
{
  return thisBinder;
}
1 голос
/ 15 декабря 2014

Вот что у меня сработало

Вместо

public IBinder onBind(Intent intent) {
    return null;
}

я использовал

public IBinder onBind(Intent intent) {
    return mMessenger.getBinder();
}
0 голосов
/ 28 сентября 2018

В моем случае это было потому, что я забыл создать экземпляр механизма связывания внутри службы, и поэтому метод Bind вернул значение NULL. У меня было это:

    private ServiceBinder mServiceBinder;

вместо этого:

    private ServiceBinder mServiceBinder = new ServiceBinder();
0 голосов
/ 22 декабря 2017

Я был xmarian, у меня была та же проблема, и позже я обнаружил, что я не дал правильное имя этой службе.Таким образом, имя службы должно быть присвоено имя атрибутаКак я полагаю, компилятор xmarian делает то же самое, что и запись в Android XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...