文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android 打开其他应用的方式

2023-09-02 12:49

关注

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

通过包名跳转

知道包名跳转有以下三种

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都没有

那么在手机桌面上该应用图标就会被隐藏,当然在主activity还是得设置以下的

<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.MainActivityval 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://blog.csdn.net/qq_39734865/article/details/131751983

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯