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();