如果已经启动apk,则直接将apk从后台调到前台运行(类似home键之后再点击apk图标启动),如果未启动apk,则重新启动
代码可以直接使用
//通过包名启动第三方应用
fun startLaunchAPK(context: Context, packageName: String,activityName:String) {
LogUtils.d(tag,"启动中。。。" +packageName)
var mainAct: String? = null
val pkgMag = context.packageManager
val intent = Intent(Intent.ACTION_MAIN)
intent.addCategory(Intent.CATEGORY_LAUNCHER)
intent.flags = Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED or Intent.FLAG_ACTIVITY_NEW_TASK
//如果已经启动apk,则直接将apk从后台调到前台运行(类似home键之后再点击apk图标启动),如果未启动apk,则重新启动
@SuppressLint("WrongConstant")
val list = pkgMag.queryIntentActivities(
intent,
PackageManager.GET_ACTIVITIES
)
for (i in list.indices) {
val info = list[i]
if (info.activityInfo.packageName == packageName) {
mainAct = info.activityInfo.name
break
}
}
if (TextUtils.isEmpty(mainAct)) {
return
}
// 启动指定的activity页面
//intent.component = ComponentName(packageName,activityName)
//启动到app的主页或启动到原来留下的位置
intent.component = ComponentName(packageName,mainAct!!)
//启动app
context.startActivity(intent)
LogUtils.d(tag,"启动成功。。。")
}
//根据包名 判断某APP是否安装
fun checkApkExist(context: Context,packageName: String) :Boolean{
// 检查app是否有安装
if (TextUtils.isEmpty(packageName))
return false
try {
val info = context.packageManager
.getApplicationInfo(
packageName,
PackageManager.GET_UNINSTALLED_PACKAGES
)
// Timber.d(info.toString()) // Timber 是我打印 log 用的工具,这里只是打印一下 log
return true
} catch (e: PackageManager.NameNotFoundException) {
// Timber.d(e.toString()) // Timber 是我打印 log 用的工具,这里只是打印一下 log
return false
}
}