2016-10-07 21 views
0

私がインストールしている場合、私の別のアプリのホーム画面のショートカットを作成するアプリを作っています。別のアプリケーションへのホーム画面ショートカット

部分的に動作します。 23レベル以下のAPIレベルでは、完全に機能します。アンドロイド6では、ショートカットを作成しますが、Intent.EXTRA_SHORTCUT_NAMEIntent.EXTRA_SHORTCUT_ICON_RESOURCEをバイパスし、使用したくない元のアイコンと名前を残します。ここで

は、私が使用していたコードの例です:

ApplicationInfo selectedApp; //app that should be used for shortcut 
Intent shortcutIntent = new Intent(getPackageManager().getLaunchIntentForPackage(selectedApp.packageName)); 
shortcutIntent.setAction(Intent.ACTION_MAIN); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "MyNewShortcut"); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic1)); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
addIntent.putExtra("duplicate", false); 
getApplicationContext().sendBroadcast(addIntent); 

マニフェスト:私はAndroidのマシュマロ上で行う必要があることを別の何かが

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 

ありますか?

EDIT

okが、これは少し混乱です。私は何とかそれを働かせることができました。
私はこの行を追加する場合:

shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "asd"); 

をそれは、メイン画面上に、私はaddIntentに設定された名前ではなく、"asd"新しいライン上のようなショートカットが作成されます。それについて論理的な説明はありますか?

+0

は、あなたがより良い、実行時のアクセス許可を追加することができます** M ** –

+0

をそれは正常なレベルの権限、危険ではないので、それはdoen'tランタイム要求が必要です。 Manifest.xmlで設定するだけで十分です – filipst

答えて

0

Android Mに何らかのバグがあるようです。

新しいアイコンと名前を取得するためのショートカットは、最初のインテントに余分な名前を付ける必要がありました。名前は第2の意図からとどまるので、空の文字列にすることもできます。次のように働いている:あなたはアンドロイドでそれを使用したい場合

ApplicationInfo selectedApp; //app that should be used for shortcut 

Intent shortcutIntent = new Intent(getPackageManager().getLaunchIntentForPackage(selectedApp.packageName)); 
shortcutIntent.setAction(Intent.ACTION_MAIN); 
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "asd"); //EDIT additional string for first intent that fixes Android M 

addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "MyNewShortcut"); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic1)); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
addIntent.putExtra("duplicate", false); 

getApplicationContext().sendBroadcast(addIntent); 
関連する問題