问题描述
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()
。