在Android主屏幕上创建类(而不是MainActivity)的快捷方式

SJo*_*GSO 2 android shortcut android-intent

我一直在寻找无所作为.我知道有几个问题,但我找不到一个适合我的问题.

基本上,我有一个活动(MainActivity),具有向主屏幕添加快捷方式的功能.当我单击快捷方式时,我希望它打开另一个活动(NewActivity).这里的搁置似乎是当我尝试启动与创建快捷方式的活动不同的活动时,它无法正常工作.

快捷方式成功完成,但是当我点击它时,我从Android系统得到一个"App not not installed"toast消息.

这是添加快捷方式的代码:

                Intent shortcutIntent = new Intent();
                shortcutIntent.setClassName("com.enceladus.myApp", "com.enceladus.myApp.NewActivity");
                shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                Intent addIntent = new Intent();
                addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
                addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Calculator");
                addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(MainActivity.this, R.drawable.calc));
                addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
                MainActivity.this.sendBroadcast(addIntent);
Run Code Online (Sandbox Code Playgroud)

编辑:这是我的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.enceladus.myApp"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.enceladus.myApp.NewActivity"
        android:label=""
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:launchMode="singleInstance"
        />
</application>
Run Code Online (Sandbox Code Playgroud)

NewActivity.class功能完美(我知道因为我已经调试了很多),所以这不是问题.

Foa*_*Guy 6

尝试使用NewActivity条目使您的清单看起来像这样:

    <activity android:name="com.enceladus.myApp.NewActivity"
    android:label=""
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:launchMode="singleInstance"
    > 
       <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

        </intent-filter>


    </activity>
Run Code Online (Sandbox Code Playgroud)

也许可以尝试像这样制作快捷方式:

Intent shortcutIntent = new Intent(MainActivity.this, NewActivity.class);
shortcutIntent.setAction(Intent.ACTION_MAIN); //Not sure if you'll need this or not.
//remove the next line.
//shortcutIntent.setClassName("com.enceladus.myApp", "com.enceladus.myApp.NewActivity");
Run Code Online (Sandbox Code Playgroud)

  • 工作非凡.非常感谢! (2认同)