[Android開発実戦]Androidにショートカットをデスクトップに追加する2つの方法

4399 ワード

転載は出典を明記してください.http://blog.csdn.net/ruils/article/details/16923201
最近、金山クリーンアップマスターのワンクリック加速ショートカットアニメーションの実現(原文)を検討し、Androidにショートカットをデスクトップに追加する方法もまとめた.
方法1:
私は受動的なアクション方式と呼んでいます.
高バージョンのandroidシステム(android 4.3,4.4)では、Lanucherのプログラムリストウィジェットから、あるウィジェットを長押しして追加し、低バージョンのandroidシステムでは、デスクトップを長押ししてショートカットを追加するオプションが表示されます.
ウィジェットやショートカットの選択項目に独自のプログラムが表示されるように、
最初にAndroidManifest.xmlで「android.intent.action.CREATE_SHORTCUT」に応答できるActivityを説明します.
例:
  
            
                

                
            
            
                

                
            
        

次に、このActivityに応答するショートカットのプロパティを設定します.
             Intent shortcutIntent = new Intent();
		//            Activity,    Lanucher   ,         。
		shortcutIntent.setComponent(new ComponentName(getPackageName(),
				getPackageName() + "."
						+ AnimationActivity.class.getSimpleName()));
		//       
		shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
				| Intent.FLAG_ACTIVITY_NEW_TASK);

		Intent resultIntent = new Intent();
		//        
		resultIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
				Intent.ShortcutIconResource.fromContext(this,
						R.drawable.shortcut_proc_clean));
		//   Intent
		resultIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
		//         
		resultIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
				getString(R.string.app_name));
                setResult(RESULT_OK, resultIntent);
	        finish();

最後に、setResult(RESULT_OK、resultIntent)を覚えておいてください.なぜ受動的なActionモードと呼ばれているのか、原因はここにある.Lanucherは私にショートカットを探して、私はそれをあげて、どのようにあげたのか、このsetResult(RESULT_OK、resultIntent);
方式2:
私はアクティブな放送方式と呼んでいます.
まず、放送をする以上、誰に送りますか?もちろんLanucherに送って、Lanucherは要りませんか、それでは私は権限を明らかにして、そのボスに挨拶して、それは要りません.社長は誰ですか.Androidシステムも.

次に、ブロードキャストのActivityにショートカットのプロパティを設定します.
                Intent shortcutIntent = new Intent();
		//            Activity,    Lanucher   ,         。
		shortcutIntent.setComponent(new ComponentName(getPackageName(),
				getPackageName() + "."
						+ AnimationActivity.class.getSimpleName()));
		//       
		shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
				| Intent.FLAG_ACTIVITY_NEW_TASK);

		Intent resultIntent = new Intent();
		//        
		resultIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
				Intent.ShortcutIconResource.fromContext(this,
						R.drawable.shortcut_proc_clean));
		//   Intent
		resultIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
		//         
		resultIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
				getString(R.string.app_name));
                
                resultIntent.setAction(ACTION_INSTALL_SHORTCUT);
                sendBroadcast(resultIntent);

ACTION_INSTALL_SHORTCUTは
public static final String ACTION_INSTALL_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT";
最後にショートカットをLanucherに送りました.この方法はアクティブで、私たちのコードロジックではいつでもブロードキャストでショートカットをLanucherに送ることができます.
この2つの方法の実現原理を知りたいなら、Lanucherコードを見てください!
第一の方法の実現原理は以下の通りである.
packages/apps/Launcher2/src/com/android/launcher2/Launcher.java  1875行
第2の方法の実現原理は以下の通りである.
packages/apps/Launcher2/src/com/android/launcher2/InstallShortcutReceiver.java
最後に、この文章が好きなら、いいね!
サンプルソースのダウンロード:http://download.csdn.net/detail/u012379847/6604299
どちらもMainActivityに書きましたので、ご注意ください
	         //           ----->    Action  。
		if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
			Log.d(TAG, "action " + action);
			setResult(RESULT_OK, resultIntent);
			finish();
		} else {
			//             ----->         
			Log.d(TAG, "sendBroadcast " + resultIntent);
			resultIntent.setAction(ACTION_INSTALL_SHORTCUT);
			sendBroadcast(resultIntent);

		}