【问题标题】:Android doesn't bind the service - Message "> Unable to start service Intent"Android 未绑定服务 - 消息 > 无法启动服务意图”
【发布时间】:2017-03-28 16:29:52
【问题描述】:

主要思想

我有两个应用程序。服务位于一个应用程序中,客户端位于另一个应用程序中。

问题是我无法绑定服务,因为它给了我错误:

无法启动服务 Intent { act=com.ccc.serviceaarfinal.WifiAARService pkg=com.ccc.serviceaarfinal } U=0:未找到

服务清单.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ccc.serviceaarfinal">

<application
    ...
    <service
        android:name="com.ccc.serviceaarfinal.WifiAARService"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="com.ccc.serviceaarfinal.WifiAARService" />
        </intent-filter>
    </service>
</application>

客户端连接尝试:

private void connectService() {
    serviceConnection = new RemoteServiceConnection();
    Intent i = new Intent("com.ccc.serviceaarfinal.WifiAARService");
    i.setPackage("com.ccc.serviceaarfinal");
    bindService(i, serviceConnection, Context.BIND_AUTO_CREATE);
}

到目前为止我尝试了什么

注意事项: 我运行adb logcat 看看是否还有其他可以帮助我的东西

我尝试在另一台计算机上运行该项目,但仍然无法运行

  • 我没有重命名包

我没有重命名任何东西

我也试过android:name=".WifiAARService"而不是android:name="com.ccc.serviceaarfinal.WifiAARService"

另一个注释。我已经实现了服务连接:

private RemoteServiceConnection serviceConnection;
private IWifiAARService service;

class RemoteServiceConnection implements ServiceConnection {

    public void onServiceConnected(ComponentName name, IBinder boundService) {
        service = IWifiAARService.Stub.asInterface((IBinder) boundService);
        Toast.makeText(MainActivity.this, "Service connected", Toast.LENGTH_LONG)
                .show();
    }

    public void onServiceDisconnected(ComponentName name) {
        service = null;
        Toast.makeText(MainActivity.this, "Service disconnected", Toast.LENGTH_LONG)
                .show();
    }
}

我尝试按照这个示例 https://www.sitepoint.com/aidl-for-sharing-functionality-between-android-apps/ 进行操作,只要我在没有任何大写字母的情况下命名模块(很奇怪,我知道),就可以为我工作。

【问题讨论】:

    标签: android


    【解决方案1】:

    来自Official Docs

    警告:为确保您的应用安全,请始终使用显式 启动服务时的意图,并且不声明意图过滤器 您的服务。使用隐式意图启动服务是一种 安全隐患,因为您无法确定将提供的服务 响应意图,用户无法看到启动了哪个服务。 从 Android 5.0(API 级别 21)开始,系统会抛出一个 如果您以隐式意图调用 bindService() 则会出现异常。

    你应该删除intent-filters 并且您可以使用ComponentName 在另一个进程中启动组件。

    Intent intent=new Intent();
            intent.setComponent(new ComponentName("com.ccc.serviceaarfinal","com.ccc.serviceaarfinal.WifiAARService"));
         appContext.bindService(intent,mConnection, Context.BIND_AUTO_CREATE)
    

    【讨论】:

    • 感谢您的回答,但现在给了我错误Unable to start service Intent { cmp=com.ccc.serviceaarfinal/.WifiAARService } U=0: not found 。不管怎样,我想我离得更近了
    • 尝试将服务名称更改为 .WifiAARService
    • "You should remove intent-filters and you can use ComponentName to start a component in another process."不是真的,&lt;intent-filter&gt;跟Intent#setPackage一起用还是可以用的
    【解决方案2】:

    我发现了问题!我只是构建服务应用程序,但需要运行应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      相关资源
      最近更新 更多