onServiceConnected() не вызывается

У меня проблема с использованием фонового сервиса.
Я пользуюсь сервисом из 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, что может быть причиной этого?

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

8 ответов

Решение

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

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

Способ исправить это было позвонить bindService(...) в контексте приложения, а не в контексте действия, используя getApplicationContext().bindService(...)

Вам нужно добавить:

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

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

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

private YourBinder thisBinder;

oncreate
{
thisBinder = new YourBinder(); <--dont forget this.
}


public class YourBinder extends Binder
{

}

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

Добавьте связывание в манифест

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

</service>

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

Это то, что сработало для меня

Вместо

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

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

public IBinder onBind(Intent intent) {
    return mMessenger.getBinder();
}
      <service
            android:name="com.app.triad.tseacro.services.LocationUpdatesService"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
            android:foregroundServiceType="location"
            >
        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
    </service>

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

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

    private ServiceBinder mServiceBinder;

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

    private ServiceBinder mServiceBinder = new ServiceBinder();
Другие вопросы по тегам