android kotlin 通过包名启动第三方应用或着启动指定的activity

如果已经启动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
        }

    }

版权声明:本文为Jeff_YaoJie原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。