I have created app shortcut on home screen. but Its not working. it always shows the toast app isn't installed
. I have tried 2 different codes but the result is always same.
Here is the first code
private void addShortcut() {
// Adding shortcut on Home screen
Intent shortcutIntent = new Intent(getApplicationContext(), MainActivity.class);
shortcutIntent.setAction(Intent.ACTION_MAIN);
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "AppName");
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(
getApplicationContext(), R.drawable.ic_launcher));
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(addIntent);
}
Second code
public static void addShortcut(Context context)
{
Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
ApplicationInfo appInfo = context.getApplicationInfo();
// Shortcut name
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, "appInfo.name");
shortcut.putExtra("duplicate", false); // Just create once
// Setup activity shoud be shortcut object
ComponentName component = new ComponentName(appInfo.packageName, "MainActivity.class");
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(component));
// Set shortcut icon
ShortcutIconResource iconResource = Intent.ShortcutIconResource.fromContext(context, appInfo.icon);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
context.sendBroadcast(shortcut);
}
Log cat and manifest:
02-03 22:36:58.625: E/memtrack(1697): Couldn't load memtrack module (No such file or directory)
02-03 22:36:58.625: E/android.os.Debug(1697): failed to load memtrack module: -2
02-03 22:37:02.515: E/memtrack(1708): Couldn't load memtrack module (No such file or directory)
02-03 22:37:02.515: E/android.os.Debug(1708): failed to load memtrack module: -2
02-03 22:37:03.255: E/InputDispatcher(388): channel 'b500ff48 com.example.test_shortcut/com.example.test_shortcut.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
02-03 22:37:13.805: E/WindowManager(388): Starting window AppWindowToken{b5537500 token=Token{b50334a8 ActivityRecord{b502b0e0 u0 com.example.test_shortcut/.MainActivity t7}}} timed out
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test_shortcut"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.test_shortcut.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.example.test_shortcut.PackageReplacedReceiver" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data
android:path="com.example.test_shortcut"
android:scheme="com.example" />
</intent-filter>
</receiver>
</application>
</manifest>
I have tried my app at emulator with api 18 and at tablet with android 4.2
Any help will be appreciated. Thanks
In my case adding
android:exported="true"
to MainActivity to be called from launcher worked. If it helps.
You may need:
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" />
Also replace:
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data
android:path="com.example.test_shortcut"
android:scheme="com.example" />
</intent-filter>
With:
<intent-filter android:priority="999">
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="com.example.test_shortcut" />
</intent-filter>
I haven't actually tested this, let me know if it works now. It also wouldn't hurt to use your own custom package name to avoid conflicts with existing apps, instead of using the default package name, that starts with com.example
, that's used for most examples, demos, and tutorials on Android.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.