Android 打开其他应用的方式

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

很多时候,我们会想打开第三方应用,比如广告中判断应用是否安装,如果安装就跳转该应用首页,未安装则去应用商店该应用详情页。
那么接下来就讲讲几种打开第三方应用首页的方案。

通过包名跳转

知道包名跳转有以下三种

a.通过packageManager.getLaunchIntentForPackage(packageName: String)

代码如下

 fun startAppWithPackageName(context: Context, packageName: String) {
 	//根据包名获取启动首页的intent 这个intent有可能为空
        val intent = context.packageManager.getLaunchIntentForPackage(packageName)
        if (intent != null) {
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            context.startActivity(intent)
        }
 }

看方法名就可以知道 这里的intent是通过PackageManager去获取该包名里面category为Launch的类,那么如果一个应用中没有定义这样的类,自然获取的intent就是空
讲到这里,扩展一下:

如果一个应用中的清单文件里所有activity都没有
<category android:name=“android.intent.category.LAUNCHER” />
那么在手机桌面上该应用图标就会被隐藏,当然在主activity还是得设置以下的<intent-filter>

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

b.还知道该应用中activite的具体类名

fun startAppWithPackageName(context: Context, packageName: String, activityName: String) {
	//activityName 举例:com.google.app.MainActivity
	val intent = Intent().apply {
            component = ComponentName(packageName, activityName)
            flags = Intent.FLAG_ACTIVITY_NEW_TASK
        }
        context.startActivity(intent)
}

c.通过Uri中是scheme进行跳转

在知道第三方应用的包名与scheme时,可以通过以下方案打开该应用
代码如下:

 val intent = Intent().apply {
      data = Uri.parse("scheme://authorty?query")
      setPackage(packageName)
      setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
 }
 context.startActivity(intent)

这里要注意的点:
scheme 一定要是第三方应用中声明过的,如果多个三方应用设置了相同的scheme,要想跳转到指定应用这一定要设置setPackage(packageName)

扩展一下

细心一点,都会发现上面的三种启动方式,我都设置了setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

那么关于这个的flag的作用是什么呢?

其实这个flag我们更常用在activity的跳转中,表示如果栈中存在该类,则直接在该栈中启动该类,否则就新建一个栈来启动该类。

那么这个flag在启动应用时也是相同的作用:将整个Android系统看成一个app,里面不同app既不同的activity,有些不太一样的点在于,如果该app已经启动了,使用该flag只会唤起该app,如果没有启动该app,那么就会启动该app。

那如果我们启动一个app会传递很多参数过去,一般app获取这些参数都会在启动页去接收并处理,那我们使用上面的FLAG_ACTIVITY_NEW_TASK,在应用存活时只会唤起app而不会走启动页,那我们又该如何让应用重新启动呢?

Intent.FLAG_ACTIVITY_CLEAR_TASK就起到作用了,我们在启动时设置以下即可重新启动该应用

setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)

注意:Intent.FLAG_ACTIVITY_CLEAR_TASK 只有和Intent.FLAG_ACTIVITY_NEW_TASK同时设置才有效。

但有些应用可能会在启动页进行拦截这种重新启动的事件,所以还得再设置以下action,而这就要看第三方应用的处理方案了。
拦截重新启动的判断为:

intent.flags and Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT != 0

结尾

启动新应用的方案,目前只知道以上三种方案,如果还有请在评论中指出,共同进步呀文章来源地址https://www.toymoban.com/news/detail-688217.html

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

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

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

相关文章

  • Android 12.0 系统开机自启动第三方app

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

    2024年02月10日
    浏览(70)
  • Android 11 获取启动其他应用

    本文代码地址 https://gitee.com/chenjim/QueryAppInfo 最新更新地址 https://gitee.com/chenjim/chenjimblog 如果应用以 Android 11(API 级别 30)或更高版本为目标平台,并查询与设备上已安装的其他应用相关的信息,则系统在默认情况下会过滤此信息。 此过滤行为意味着您的应用无法检测设备上

    2024年02月14日
    浏览(34)
  • Android将Uri转为路径字符串(适配安卓全版本)并使用第三方应用打开文件(适配Android7.0+)

    做这个功能时在网上找了无数篇例子,有些方法是有问题的,故自己写一篇完整实现的总结,作备忘也作案例。顺便说一句,Android对存储权限的给予真的越来越严格 目录 1.Uri转为路径String以获得文件名  2.获取文件后缀名 3.通过后缀名获取文件MIME类型  4.设置Intent的Uri与权限

    2024年02月19日
    浏览(43)
  • Android 应用启动时间统计方式

    TTID 指标用于测量应用生成第一帧所用的时间,包括进程初始化(如果是冷启动)、activity 创建(如果是冷启动/温启动)以及显示第一帧。 在 Android 4.4(API 级别 19)及更高版本中,Logcat 提供了一个 Displayed 值,用于测量从启动进程到完成在屏幕上绘制 activity 的第一帧之间经

    2023年04月25日
    浏览(34)
  • iOS和Android手机浏览器链接打开app store或应用市场下载软件

    1.Android主流手机跳转链接 2.判断手机类型 3.iOS跳转app store

    2024年02月11日
    浏览(100)
  • Android Permission 权限申请,EasyPermission和其他三方库

    在Android的实际开发中,经常会因为需求的实现,需要申请用户权限。 今天总结下Android中常用的权限申请。 一、基本介绍和流程 Android中的权限申请是通过应用程序与操作系统之间的交互实现的。在Android中,每个应用程序都被赋予了一组预定义的权限,这些权限定义了应用程

    2024年02月13日
    浏览(47)
  • iOS和Android手机浏览器链接打开app store或应用市场下载软件讲解

    当开发一个app出来后,通过分享引流用户去打开/下载该app软件,不同手机下载的地方不一样,比如:ios需要到苹果商店去下载,Android手机需要到各个不同的应用商店去下载(华为手机需要到华为应用商店下载,vivo手机需要到vivo手机的应用商店下载,oppo需到oppo的应用商店去下

    2024年02月13日
    浏览(137)
  • Flutter:使用url_launcher打开外部浏览器、拨打电话、发送短信、打开第三方app、打开应用商店下载应用

    Flutter中的 url_launcher 是一个用于打开URL的插件。它允许在Flutter应用程序中打开网址、发送电子邮件、拨打电话等操作。使用 url_launcher 插件,可以轻松地在应用程序中集成各种URL操作。 官方地址 https://pub-web.flutter-io.cn/packages/url_launcher 安装 打开网址 这里有两个注意点: 模拟

    2024年02月08日
    浏览(82)
  • android13(T) 三方APP默认授权

    按照以往经验修改给三方apk权限全开,发现13上坑不少。PermissionController 仅仅只是一个普通app,就和在AS中直接编写一样,完全用不了一些hide api,尝试修改了几次 android.bp 文件没有任何效果,引入核心api编译依旧报错。那只好曲线救国了,最终通过aidl方式搞定。 修改清单

    2024年02月03日
    浏览(34)
  • android_adb pm和adb am@启动Activity@杀死app进程@冻结或卸载系统更新和应用商店

    Android 调试桥 (adb) | Android 开发者 | Android Developers (google.cn) 这部分文档并不包含所有的指令功能的介绍 可以和命令行的 --help 选项的本地文档一同查阅 运行方式有两种 不进入shell直接运行 每次执行命令(issue command)需要带上adb shell开头的前缀 例如: adb shell pm list packages -s -d|nl

    2024年02月03日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包