我在使用后台服务时遇到问题。 我正在使用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,这可能导致什么?
提前致谢
经过一些研究,我发现这是Android中的一个已知问题。
我正在谈论的第二项活动是在TabActivity
中用作内容的活动。
解决这个问题的方法是在应用程序上下文中调用bindService(...)
,而不是使用getApplicationContext().bindService(...)
调用活动上下文
你需要添加:
<service android:name="package.path.to.your.service.class" android:enabled="true"></service>
在Android清单文件中。
在清单中添加绑定..
<service
android:name=".MyAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
</service>
MyAccessibilityService您的服务名称。
它刚刚发生在我身上。
不要忘记在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;
}
这对我有用
代替
public IBinder onBind(Intent intent) {
return null;
}
我用了
public IBinder onBind(Intent intent) {
return mMessenger.getBinder();
}
我是xmarian并遇到同样的问题,后来发现我没有给该服务正确的名称。所以服务名称应该是name属性。我认为xmarian编译器在Android XML中做同样的事情。
在我的情况下,这是因为我忘记在服务中实例化绑定器,因此onBind返回null。我有这个:
private ServiceBinder mServiceBinder;
而不是这个:
private ServiceBinder mServiceBinder = new ServiceBinder();