【问题标题】:onServiceConnected() not calledonServiceConnected() 未调用
【发布时间】:2011-10-24 11:47:57
【问题描述】:

我在使用后台服务时遇到问题。
我正在使用 2 个活动的服务。

第一个活动以startService(intent) 开始Service,并以bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 绑定到它

这很好用,我可以在onServiceConnected() 中发送Message

第二个活动只绑定到Service(因为它已经启动了),再次使用bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

现在这是我的问题:
在第二个活动中,我有一个 Button,当我按下它时应该使用该服务。
但是,onServiceConnected() 在此活动中从未被调用,因此我无法让活页夹创建Messenger 以将Message 发送到服务器。

有谁知道onServiceConnected() 的确切调用时间,或者它可能在等待什么?
或者也许有其他方法可以解决这个问题?

编辑: bindService 返回 false,是什么原因造成的?

提前致谢

【问题讨论】:

标签: android android-service


【解决方案1】:

你需要添加:

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

在 Android 清单文件中。

【讨论】:

  • 对我来说,不需要.class
  • 非常非常import add package + name in manifest package.path.to.your.service.class
  • 我遇到了这个问题,因为我将两个项目合并为一个,并且忘记将服务声明添加到主清单文件中。令人讨厌的是,Android 没有给出任何提示。
【解决方案2】:

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

我所说的第二个活动是在TabActivity 中用作内容的活动。

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

【讨论】:

  • 您好,我也有同样的问题。你能再解释一下补救措施吗?如果可能的话,你能在这里看看我的代码并告诉我应该改变什么吗?太感谢了。这个错误让我发疯了一天。我的代码:ideone.com/cV5BJa
  • 你能解释一下为什么我们需要使用 getApplicationContext().bindService 而不是 bindService 吗? bindService 在我的一项活动中有效,但在我的另一项活动中无效(getApplicationContext().bindService 有效)。这很奇怪。
  • 非常感谢!!这正是我所面临的,使用应用程序上下文而不是活动上下文很有意义。它解决了我的问题!谢谢大佬!!
【解决方案3】:

这件事刚刚发生在我身上。
不要忘记在 onbind 返回之前实例化您的 binder 类。 愚蠢的错误,但它发生了。希望这对将来的人有所帮助。

private YourBinder thisBinder;

oncreate
{
  thisBinder = new YourBinder(); //don't forget this.
}


public class YourBinder extends Binder
{

}

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

【讨论】:

  • 来自未来,这对我有帮助。谢谢。
【解决方案4】:

这对我有用

代替

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

我用过

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

【讨论】:

  • 如果您不需要特定的实现,它甚至可以与新的 Binder() 一起使用
【解决方案5】:

在清单中添加绑定..

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

</service>

MyAccessibilityService 您的服务名称。

【讨论】:

    【解决方案6】:

    我是 xmarian 并且遇到了同样的问题,后来发现我没有为该服务提供正确的名称。所以服务名称应该被赋予名称属性。我想 xmarian 编译器在 Android XML 中做同样的事情。

    【讨论】:

      【解决方案7】:

      就我而言,这是因为我忘记在服务中实例化活页夹,所以 onBind 返回了 null。 我有这个:

          private ServiceBinder mServiceBinder;
      

      而不是这个:

          private ServiceBinder mServiceBinder = new ServiceBinder();
      

      【讨论】:

        【解决方案8】:
        <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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-30
          • 1970-01-01
          相关资源
          最近更新 更多