2011-10-24 1 views
13

У меня возникла проблема с использованием фоновой службы.
Я пользуюсь услугой из 2 мероприятий.onServiceConnected() не называется

Первая активность начинает 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() называется точно или что он, возможно, ждет?
Или, может быть, что-то еще, чтобы исправить эту проблему?

EDIT:bindService возвращает false, что может быть причиной этого?

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

+0

'bindService' должен возвращать' false', если вы хотите, чтобы 'onRebind' вызывался после первой привязки. – farukdgn

ответ

24

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

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

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

+2

Привет, у меня такая же проблема. Не могли бы вы объяснить это средство немного больше? Если возможно, вы можете посмотреть мой код здесь и сказать мне, что нужно изменить? Огромное спасибо. Эта ошибка заставляет меня сумасшедшим на один день. Мой код: http://ideone.com/cV5BJa –

+0

Не могли бы вы объяснить мне, почему нам нужно использовать getApplicationContext(). BindService not bindService? bindService работает в моей одной активности, но не работает в моем другом действии (getApplicationContext(). BindService работает). Это очень странно. – Thinsky

+0

Большое спасибо! Это именно то, с чем я столкнулся, и имеет смысл использовать контекст приложения, а не контекст активности. Это решило мою проблему! Спасибо чувак!! – Sjd

8

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

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

</service> 

MyAccessibilityService ваше имя службы.

16

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

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

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

+2

для меня, это не нужно .class –

+1

очень очень import добавить пакет + имя в манифест package.path.to.your.service.class –

1

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

Вместо

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

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

public IBinder onBind(Intent intent) { 
    return mMessenger.getBinder(); 
} 
+0

Он даже работает с новым Binder(), если вам не нужна конкретная реализация – DrinkBird

5

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

private YourBinder thisBinder; 

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


public class YourBinder extends Binder 
{ 

} 

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^