无法启动外部应用程序

问题描述

我有以下代码来启动外部应用程序,但它不起作用:

License@R_515_4045@ion

我尝试过以下软件包:

  • com.google.android.youtube
  • com.teamviewer.quicksupport.market

有什么想法吗?

编辑

使用@Mayur Gajra 的代码,它可以使用 private fun launchApplication(packageName: String) { try { val application = packageManager.getLaunchIntentForPackage(packageName) startActivity(application) } catch (ex: Exception) { } } 而不是 com.google.android.youtube,抛出以下错误

android.content.ActivityNotFoundException:找不到要处理的活动 意图 { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x4000000 pkg=com.teamviewer.quicksupport.market }

但是如果我搜索使用以下代码安装的软件包,TeamViewer 就会出现:

com.teamviewer.quicksupport.market

解析信息{40c33b1 com.teamviewer.quicksupport.market/com.teamviewer.quicksupport.ui.QSActivity m=0x108000}

  • packageName = com.teamviewer.quicksupport.market
  • className = com.teamviewer.quicksupport.QSApplication

有什么想法吗?

解决方法

您可以尝试这种方式,让系统找到该包的 Launcher 类别的活动并启动它。

private fun launchApplication(packageName: String) {
        try {
            val intent = Intent(Intent.ACTION_MAIN)
            intent.addCategory(Intent.CATEGORY_LAUNCHER)
            intent.setPackage(packageName)
            intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
            startActivity(intent)
        } catch (ex: Exception) {
        }
    }
,

最后用以下代码解决:

private fun launchApplication(packageName: String)
{
    try
    {
        // Find application with that package name
        val mainIntent = Intent(Intent.ACTION_MAIN,null)
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER)
        val pkgAppsList = packageManager.queryIntentActivities(mainIntent,0)
        val application = pkgAppsList.first { it.activityInfo.applicationInfo.packageName == packageName }

        // Start that application
        val intent = Intent()
        intent.setClassName(application.activityInfo.packageName,application.activityInfo.name)
        startActivity(intent)
    }
    catch (ex: Exception) { }
}

一些附加说明:如果应用程序在 Lock Task Mode 中,此方法将不起作用,记得之前调用 stopLockTask()