为什么此代码不启动Android小部件

时间:2014-05-20 09:33:31

标签: java android

这是我用来启动应用的代码:

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;
    }

此代码启动应用程序时没有错误但不启动小部件。尝试启动窗口小部件时,不会抛出任何异常,并且不会启动窗口小部件。可以修改代码以启动小部件吗?

1 个答案:

答案 0 :(得分:0)

首先,Android中“应用程序”的概念略有扩展。

应用程序 - 从技术上讲是一个过程 - 可以有多个活动,服务,内容提供者和/或广播听众。如果其中至少有一个正在运行,则应用程序已启动并正在运行(该过程)。

所以,你需要确定的是你想如何“启动应用程序”。

好的......这是你可以试试的:

使用action=MAINcategory=LAUNCHER创建一个意图。使用PackageManager

从当前上下文中获取context.getPackageManager
packageManager.queryIntentActivity(<intent>, 0)

其中intentcategory=LAUNCHERaction=MAIN

packageManager.resolveActivity(<intent>, 0)

使用main / launcher获取第一个活动。获取您感兴趣的ActivityInfo。从ActivityInfo获取packageName和姓名。最后,使用category=LAUNCHERaction=MAIN

创建另一个意图
componentName = new ComponentName(packageName, name)

setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

最后

context.startActivity(newIntent)