2011-01-31 7 views
15

あなたが知っているように、アプリがインストールされていると、ランチャーメニュー画面にアイコンが作成されます。 私がしたいことは、インストール中にユーザーのホーム画面にアイコンを作成することです。 (5秒間のアイコンを押さず。)ランチャーのホーム画面にアプリアイコンを配置するにはどうすればよいですか?

私はただのAndroidManifest.xmlファイルに

<category android:value="android.intent.category.HOME" /> 

を追加するために別のソースからこれを聞いたが、それはうまくいきませんでした。

他の方法はありますか?あなたは、この使用することができます

+10

これは悪い習慣ではないと思われますか?ユーザーが画面上にアイコンを表示したい場合は、アイコン自体を非常に簡単に行うことができます。 – Jems

+2

これは、すべてのインストール/アップグレード/スタートアップ時に自分自身をデスクトップに追加することを主張する激怒するWindowsアプリケーションに似ています。方法を見つけたとしても、しないでください*。 – ZoogieZork

+5

@Jems、ZoogieZorkどちらも正しいですが、企業所有のデバイスの従業員だけが利用できるエンタープライズアプリケーションストアなど、この機能が必要な状況もあります。これらのユーザーの多くは、ホーム画面にアプリケーションを配置する知識は持っていませんが、ユーザーがアプリケーションを操作すると、ユーザーエクスペリエンスがはるかに向上します。 – Kennifer

答えて

15

Intent shortcutIntent = new Intent(); 
shortcutIntent.setClassName("packageName", "className"); 
//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, "shortcut_name"); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, 
Intent.ShortcutIconResource.fromContext(context, R.drawable.icon)); 
//intent.putExtra("duplicate", false); 
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
      context.sendBroadcast(addIntent); 

あなたのAndroidManaifest.xmlに次の権限を使用する必要が

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

をあなたの要件に応じて、コメントコードを使用することができます。

おそらくAPIの上には記載されていないことに注意してください。しかし、それは動作します。

+3

ショートカットをアンインストールする場合は、私の回答を参照してください。http://stackoverflow.com/questions/3480287/trying-to-uninstall-shortcut-but-shortcut-wont-go-away/ – Vasu

+0

実際、Javaの初心者では、 Kaillashのアンインストールの例からこのコードを理解するだけです。この例は、それをメインアクティビティの中に入れることができることを示しています。 しかし、このコードをonCreate()イベントハンドラに入れると、アプリケーションが起動されるたびにショートカットが作成/再作成されます。そのための修正? – Wytze

+1

それは動作します。しかし、私はオプションと思う:intent.putExtra( "duplicate"、false);ホームスクリーンに重複アイコンが表示されないようにデフォルトでオンにする必要があります – anticafe

-1

setupの機能を使用して、ユーザーがすべての操作を実行できるようにすることができます。たとえば、必要なユーザーアクセス可能なフォルダ(存在しない場合)を作成し、ショートカットをホーム画面に追加したり、初期データをロードしたりします。

これは私が実際に書いている機能なので、うまくいけばうまくいきます。しかし、ええ、ポイントはonCreate()の外に置いておき、毎回呼び出されることはありません!

+0

@Wytze:これはKailashの答えに対するあなたの最後のコメントに対する回答 - 応答です。 –

7

これらの方法を使用して、ショートカットを適切に追加または削除します。これらのメソッドは非常にうまく動作しており、ユーザがショートカットを手動で追加/削除すると、Androidシステムと同じとなります。

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, appInfo.className); 
    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); 
} 

public static void deleteShortcut(Context context) 
{ 
    Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT"); 

    ApplicationInfo appInfo = context.getApplicationInfo(); 

    // Shortcut name 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, appInfo.name); 

    ComponentName comp = new ComponentName(appInfo.packageName, appInfo.className); 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp)); 

    context.sendBroadcast(shortcut); 
} 

権限:

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

BroadcastReceiver:

<receiver android:name="YOUR.PACKAGE.PackageReplacedReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
     <data android:scheme="package" android:path="YOUR.PACKAGE" /> 
    </intent-filter> 
</receiver> 
+0

ウィジェットでも機能しますか? – Sanjeev

8

これは、現在Google Playのサービスによって解決されます。これを行うためのコードを追加する必要はありません。これで、Google Playストアからアプリをインストールすると、メイン画面にロゴが自動的に作成されます。 Google Playストア設定で処理できます。 例外:カスタムROMまたはランチャーを使用している場合、一部のROMまたはランチャーでは機能しません。

+0

実際、これはAndroidの初めから基本機能でした。これはプレイストアやそのサービスとは関係ありません。 –

+0

もしあなたがそれを望まないのなら?私は別のアプリの意図から起動する必要があるアプリを持っています。しかし、私は設定のためのランチャー活動を持っています。私は設定アイコンがデフォルトでホームスクリーンに追加されることを望んでいません。 – Roel

1

は、私は上記の回答で問題があったし、それはだから、デバッグ/エミュレーションモードでgetApplicationInfo()クラス名のAPI 22と、おそらく他のAPIを返す:。
「com.android.tools.fd.runtime.BootstrapApplication」

最も重要なことは、クラス名のクラスへのパス全体を設定する必要があることです。 (変更を参照してください)

例えば、私は次のものを持っていました:
packageName = com.example.user。myappの私は、この行を変更するために必要なKailash answer
クラス名= MainActivity

ChristopheCVBs answer
shortcutIntent.setClassName("com.example.user.myapp", "com.example.user.myapp.MainActivity"); 



shortcutIntent.setClassName("packageName", "className"); 

を、私はこの行を変更するために必要な:

ComponentName comp = new ComponentName(appInfo.packageName, appInfo.className); 

ComponentName comp = new ComponentName(appInfo.packageName, appInfo.packageName+".MainActivity"); 
関連する問題