启动快捷方式失败:应用程序未安装在您的手机上。

6

我正在尝试创建一个桌面快捷方式,指向我在Android应用中的某个Activity。

我使用了一段代码,在我阅读的每个教程示例中都能够运行:

    final Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
    ComponentName name = new ComponentName(getPackageName(), ".MyActivity");
    shortcutIntent.setComponent(name);

    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);


    final Intent intent = new Intent();
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);

    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "blabla");
    intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);

    intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    sendBroadcast(intent);
    finish();

我在我的活动中添加了MAIN操作:

    <activity android:label="@string/app_name" android:name=".MyActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>

结果是应用程序无法启动!
在Logcat中,一切似乎都很好:
10-01 01:17:51.591: INFO/ActivityManager(2424): Starting activity: Intent { act=android.intent.action.MAIN flg=0x14000000 cmp=my.package.name/.MyActivity bnds=[125,384][235,522] (has extras) }

Home 告诉我应用程序未安装。

请帮助我,我完全不知所措,花费了几个小时尝试解决这个问题并阅读了所有可以获得的信息。

非常感谢!

2个回答

9

试试这个:

  1. 去掉 <intent-filter>
  2. 去掉 ACTION_MAIN,只使用 new Intent(this, MyActivity.class)
  3. 在清单文件中的 <activity> 元素中添加 android:exported="true"

错误/Launcher(12197):启动器没有权限启动Intent { flg=0x10000000 cmp=my.package.name/.MyActivity bnds=[125,534][235,672] (has extras) }。请确保为相应的活动创建一个MAIN intent-filter或使用此活动的导出属性。 10-01 02:51:57.701: ERROR/Launcher(12197): java.lang.SecurityException: 权限拒绝:从ProcessRecord{485b9b38 12197:com.sec.android.app.twlauncher/10005} (pid=12197, uid=10005)启动Intent { flg=0x10000000 cmp=my.package.name/.MyActivity bnds=[125,534][235,672] (has extras) }需要null。 - Waza_Be
7
尝试在Android清单文件中的<activity>元素中添加android:exported="true" - CommonsWare
1
添加 Intent 时,Sem OK。 <action android:name="android.intent.action.MAIN" /> - Waza_Be
2
是的,我可以确认,android.intent.action.MAIN 是必需的。 - Waza_Be
Commonsware的评论应该被选为答案。 - Shine
可以添加以下代码:<intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> - RxRead

8
如果你在 AndroidManifest.xml 文件中将活动声明为启动器并且再次声明,就可能会出现这种情况:
<activity android:name=".MyActivity" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接