Android 11 获取启动其他应用

这篇具有很好参考价值的文章主要介绍了Android 11 获取启动其他应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android 11 获取启动其他应用

本文代码地址 https://gitee.com/chenjim/QueryAppInfo
最新更新地址 https://gitee.com/chenjim/chenjimblog

前言

如果应用以 Android 11(API 级别 30)或更高版本为目标平台,并查询与设备上已安装的其他应用相关的信息,则系统在默认情况下会过滤此信息。

此过滤行为意味着您的应用无法检测设备上安装的所有应用,这有助于最大限度地减少您的应用可以访问但在执行其用例时不需要的潜在敏感信息。

比如 queryIntentActivities()、getPackageInfo() 和 getInstalledApplications() 将无法获取到返回结果.

问题示例

在本文示例代码中,先运行 app2 ,在运行 app,从日志可以看到未获取到 app2 的信息
而且还有 PackageManager.NameNotFoundException 异常
Android 11 获取启动其他应用,Android开发,android

解决问题

如果需要能获取到 app2 的信息,
修改文件 app\src\main\AndroidManifest.xmlqueries 字段如下

    <queries>
        <package android:name="com.chenjim.app2"/>
        ......
    </queries>

然后,我们就可以顺利的跳转到 app2

    val bt = findViewById<Button>(R.id.go_other_bt)
    if (info == null) {
        bt.isEnabled = false
    } else {
        bt.setOnClickListener {
            val cName = ComponentName(pkg, "com.chenjim.app2.App2Activity")
            val intent = Intent.makeMainActivity(cName)
            startActivity(intent)
        }
    }

问题扩展

当我们调用第三方SDK时,比如微博、微信分享,启动另外一个应用的某后台服务,均可能遇到类似的情况。
这时,我们就需要在我们应用 manifest 中,用 queries 声明被调用者的信息,

参考文章
https://developer.android.com/training/package-visibility
https://medium.com/androiddevelopers/package-visibility-in-android-11-cc857f221cd9文章来源地址https://www.toymoban.com/news/detail-633742.html

到了这里,关于Android 11 获取启动其他应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 从其他xml文件中获取View组件数据

    问题 Android Studio 我想在 trace.java 从setting.java绑定的页面activity_setting.xml中 的editview中获取数据 解决方案 仅适用于 在同一应用的不同组件之间共享数据 在 SettingActivity.java 中,当用户准备离开当前活动时,可以将 EditText 中的数据保存到一个全局变量或者共享的存储位置。常见

    2024年02月14日
    浏览(48)
  • Android 打开其他应用的方式

    很多时候,我们会想打开第三方应用,比如广告中判断应用是否安装,如果安装就跳转该应用首页,未安装则去应用商店该应用详情页。 那么接下来就讲讲几种打开第三方应用首页的方案。 知道包名跳转有以下三种 代码如下 看方法名就可以知道 这里的intent是通过PackageMan

    2024年02月10日
    浏览(38)
  • Android 允许其他应用读取本应用的私有目录

    在Android中,应用默认是封闭的,不允许其他应用访问自己的私有目录。但是,如果你想要让其他应用能够访问你的应用中的某些文件,你可以使用FileProvider类来实现这一功能。 以下是使用FileProvider的步骤: 1. 在你的应用的 AndroidManifest.xml 文件中声明FileProvider: 2. 在 res/xm

    2024年04月12日
    浏览(34)
  • Android 11 SystemUI 启动流程

    从表面上看, 我们看到的 状态栏、通知栏、下拉菜单、导航栏、锁屏、最近任务、低电提示 等系统页面都是 SystemUI 的。SystemUI,在源码目录中位于: framework/base/packages 目录下, 可见 SystemUI 和 framework 是关联的, SystemUI 依赖了很多内部 API , 系统资源, SystemUI 编译是要依赖

    2024年02月13日
    浏览(38)
  • Android获取App冷启动、热启动时间

    启动模拟器或者连接手机,通过adb命令的方式获取App冷启动、热启动时间。 启动App的adb命令: -W:启动完成之后,返回启动耗时。 比如,我的packagename是com.example.myapplication,我的MainActivity的配置如下: 则adb启动命令为 一、冷启动时间(如果应用启动过,则从最近任务杀进程

    2024年02月05日
    浏览(78)
  • Android 11.0 系统开机自启动第三方app

      在11.0的系统rom定制化开发中,由于有些第三方app,需要在接收到开机广播后,启动app,但是在10.0以后第三方app就接收不到开机广播了 只有系统app才可以接收到开机广播了,所以在app内通过接收开机广播自启动就没法实现了 这就需要在系统中添加监听开机完成广播的功能,

    2024年02月16日
    浏览(86)
  • Android11 init.rc添加开机自启动service

             因项目需要,在开机启动的时候需要执行can初始化命令,但是在init.rc里面又不能直接执行shell命令,所以就需要添加一个service在开机的时候执行。         在device路径下添加可执行的命令并且编译出来,添加main.cpp和Android.mk:         main.cpp          

    2024年02月15日
    浏览(45)
  • 【Android 11/12】 通过Uri获取绝对路径的方法

    原理:通过对不同的Uri进行辨别,提取ID, 需要 android.permission.MANAGE_EXTERNAL_STORAGE 权限 直接获取\\\"primary:\\\"后的路径即可,后面即是相对路径. 与下一个类似,获取ID后进入数据表中查找. 进入MediaStore.Files表中进行查询_data字段,旧版通过直接查询uri的方法获取_data已经无效. 下面

    2024年02月15日
    浏览(44)
  • Android 11以上获取不到第三方app是否安装

    开年第一篇,处理了一下年前的小问题。 问题:本地app跳转到第三方app地图进行导航,获取不到第三方地图是否安装。 解决: 1.添加包名  This can be done by adding a  queries  element in the Android manifest.在app下的manifest文件内manifest标签下添加 queries标签设置包名 2.MapUtil工具类 3.调用

    2024年02月19日
    浏览(54)
  • Android 获取app启动来源(是被谁启动的、被哪个第三方app启动?)

    1、需求:需要知道当前app或者当前app的指定页面是被谁启动的,被哪个第三方app启动的,来判断是否允许对方启动,如果不被允许的第三方,则不启动app或者不启动app的指定页面。 2、直接上代码。 第一种方式: 第二种方式: 调用方式:

    2024年02月12日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包