Android 启动其他应用的Activity或Service失败解决

本文仅针对Android11,如果你的模拟器或设备是Android11的话,请继续看下去。

一、提出问题

最近在使用一个应用绑定另外一个应用的Service时,无论如何都绑定不上,现象是Service的onCreate()和onStartCommand()回调都没有执行。说明应用之间的通信出现了问题。

二、调查过程

了解到我们现在使用的模拟器使用的是Android11,所以抱着试一试的态度去看了一下Android11的新特性。发现在Android11中新增了一项“包可见性”。

参考连接:Android官方文档-Android11新特性

通过这个描述,感觉我遇到的问题与这个有一定的关系。

进一步调查,原来Android11中限制了应用的可见性。同时,只有部分应用是对所有应用自动可见的。链接:Android官方文档-自动可见应用

三、解决方案

方案一:在Manifest中添加<queries>标签,然后使用指定包名。

参考链接:Android官方文档-查询指定软件包并与之交互

<manifest package="com.example.game">
    <queries>
        <package android:name="com.example.store" />
        <package android:name="com.example.services" />
    </queries>
    ...
</manifest>

方案二:在Manifest中添加<queries>标签,并指定过滤器。

参考链接:Android官方文档-在给定 intent 过滤器的情况下查询应用及与之交互

<manifest package="com.example.game">
    <queries>
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="image/jpeg" />
        </intent>
    </queries>
    ...
</manifest>

方案三:如果使用content provider,则需要在<queries>中指定授权

参考链接:Android官方文档-在给定提供程序授权的情况下查询应用及与之交互

<manifest package="com.example.suite.enterprise">
    <queries>
        <provider android:authorities="com.example.settings.files" />
    </queries>
    ...
</manifest>

方案四:添加QUERY_ALL_PACKAGES权限。

注意:这种方法比较暴力,添加权限后,应用就可以访问所有的已安装应用了。但是官方明确指出不建议这样做。

在绝大多数情况下,可以通过以下方式实现您应用的用例:与一组自动可见的应用交互,并在您的清单文件中声明您的应用需要访问的其他应用。为了尊重用户隐私,您的应用应请求应用正常工作所需的最小软件包可见性。

参考链接:Android官方文档-查询所有应用及与之交互

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>

                                                                                                                                 作者:pc_Li

                                                                                                                                 发布于:CSDN

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值