onServiceConnected()未调用

时间:2011-10-24 11:47:58

标签: android android-service

使用后台服务时遇到问题 我正在使用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的时间,或者它可能正在等待的内容吗? 或者可能还有别的东西来解决这个问题?

编辑: {{1}}返回false,可能是什么原因造成的?

提前致谢

7 个答案:

答案 0 :(得分:26)

经过一些研究,我发现这是Android中的一个已知问题。

我所讨论的第二项活动是一项用作TabActivity内容的活动。

解决此问题的方法是在应用程序上下文中调用bindService(...),而不是使用getApplicationContext().bindService(...)

调用活动上下文

答案 1 :(得分:19)

您需要添加:

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

在Android清单文件中。

答案 2 :(得分:9)

在清单中添加绑定..

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

</service>

MyAccessibilityService您的服务名称。

答案 3 :(得分:7)

刚才发生在我身上 不要忘记在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;
}

答案 4 :(得分:1)

这对我有用

而不是

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

我用过

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

答案 5 :(得分:0)

我是xmarian并遇到同样的问题,后来发现我没有给该服务正确的名称。所以服务名称应该是name属性。我认为xmarian编译器在Android XML中做同样的事情。

答案 6 :(得分:0)

在我的情况下,这是因为我忘记了实例化服务内部的绑定程序,因此onBind返回null。 我有这个:

    private ServiceBinder mServiceBinder;

代替此:

    private ServiceBinder mServiceBinder = new ServiceBinder();