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

Android 启动其他应用的Activity或Service失败解决,第1张

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

一、提出问题

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

二、调查过程

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

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

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

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

三、解决方案

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

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


    
        
        
    
    ...

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

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


    
        
            
            
        
    
    ...

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

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


    
        
    
    ...

方案四:添加QUERY_ALL_PACKAGES权限。

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

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

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

                                                                                                                                 作者:pc_Li

                                                                                                                                 发布于:CSDN

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/992053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存