这是我用来启动应用的代码:
launchApp(context , packagemanager , "com.android.phone")
/*
* Launch an application
*
* @param c Context of application
*
* @param pm the related package manager of the context
*
* @param pkgName Name of the package to run
*/
public static boolean launchApp(Context c, PackageManager pm, String pkgName) {
// query the intent for lauching
Intent intent = pm.getLaunchIntentForPackage(pkgName);
// if intent is available
if (intent != null) {
try {
c.startActivity(intent);
} catch (ActivityNotFoundException ex) {
// quick message notification
Toast toast = Toast.makeText(c, "Application Not Found",
Toast.LENGTH_LONG);
// display message
toast.show();
}
catch (Exception e){
e.printStackTrace();
}
}
// by default, fail to launch
return false;
}
此代码启动应用程序时没有错误但不启动小部件。尝试启动窗口小部件时,不会抛出任何异常,并且不会启动窗口小部件。可以修改代码以启动小部件吗?
答案 0 :(得分:0)
首先,Android中“应用程序”的概念略有扩展。
应用程序 - 从技术上讲是一个过程 - 可以有多个活动,服务,内容提供者和/或广播听众。如果其中至少有一个正在运行,则应用程序已启动并正在运行(该过程)。
所以,你需要确定的是你想如何“启动应用程序”。
好的......这是你可以试试的:
使用action=MAIN
和category=LAUNCHER
创建一个意图。使用PackageManager
context.getPackageManager
packageManager.queryIntentActivity(<intent>, 0)
其中intent
有category=LAUNCHER
,action=MAIN
或
packageManager.resolveActivity(<intent>, 0)
使用main / launcher获取第一个活动。获取您感兴趣的ActivityInfo
。从ActivityInfo
获取packageName
和姓名。最后,使用category=LAUNCHER
,action=MAIN
,
componentName = new ComponentName(packageName, name)
和
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
最后
context.startActivity(newIntent)