Android 11 解决跨应用绑定Service失败

        问题描述:安卓系统升级到11后,调用bindService一直返回flase,测试低版本正常。那么需要研究一下新版本特性。

1,管理软件包可见性

      声明您的应用与一组特定的其他应用交互

        如果您的应用以 Android 11(API 级别 30)或更高版本为目标平台,并且需要与应用(自动可见的应用除外)交互,请在您应用的清单文件中添加 <queries> 元素。在 <queries> 元素中,按软件包名称按 intent 签名按提供程序授权指定其他应用,如以下部分所述。

        查询特定软件包及与之交互

        如果您知道要查询或与之交互的一组特定应用(例如,与您的应用集成的应用或您使用其服务的应用),请将其软件包名称添加到 <queries> 元素内的一组 <package> 元素中:

<manifest package="com.cqrcb.test">
    <queries>
        <package android:name="com.cqrcb.paymentsdke" />
    </queries>
    ...
</manifest>

      在给定 intent 过滤器的情况下查询应用及与之交互

        您的应用可能需要查询一组具有特定用途的应用或与之交互,但您可能不知道要添加的具体软件包名称。在这种情况下,您可以在 <queries> 元素中列出 intent 过滤器签名。然后,您的应用就可以发现具有匹配的 <intent-filter> 元素的应用。

<manifest package="com.cqrcb.test">
    <queries>
        <intent>
            <action android:name="com.cqrcb.payment.service" />
        </intent>
    </queries>
    ...
</manifest>

  2,解决问题

        这里只展示部分代码,重点展示如何设置软件包可见性。 

        服务端AndroidManifest.xml配置

    <service
        android:name="com.cqrcb.paymentsdk.services.AidlSService"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="com.cqrcb.payment.service" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </service>

    客户端跨应用启动Service服务

    private void bindAidlService() {
        Intent intent = new Intent();
        intent.setAction("com.cqrcb.payment.service");
        intent.setPackage("com.cqrcb.paymentsdk");
        boolean result = bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
        Log.i(TAG, "bindAidlService: " + result);
    }

   AndroidManifest.xml配置软件包可见性

   package 对应服务端的包名

   action 对应服务端的name

    <queries>
        <package android:name="com.cqrcb.paymentsdk" />
        <intent>
            <action android:name="com.cqrcb.payment.service" />
        </intent>
    </queries>

    设置完再启动Service会发现还是不行,还需要把服务端设置为自启动

     如果遇到添加queries报错,需要升级gradle与build版本

 总结一下就是在客户端设置软件包可见性、服务端设置为自启动。

 发现问题还是得查官方,最后附上文档: 管理软件包可见性  |  Android 开发者  |  Android Developers

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peacejay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值