很多时候,我们会想打开第三方应用,比如广告中判断应用是否安装,如果安装就跳转该应用首页,未安装则去应用商店该应用详情页。
那么接下来就讲讲几种打开第三方应用首页的方案。
通过包名跳转
知道包名跳转有以下三种
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
结尾
启动新应用的方案,目前只知道以上三种方案,如果还有请在评论中指出,共同进步呀文章来源地址https://www.toymoban.com/news/detail-688217.html
到了这里,关于Android 打开其他应用的方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!