0

このようなLauncherで自分のアプリにショートカットを追加します。Androidアプリのショートカット通知

public void create(String name, Bitmap bitmap, int appID) { 
    final Intent shortcutIntent = new Intent(context, SplashActivity.class); 
    shortcutIntent.setAction(Intent.ACTION_MAIN); 

    final Intent intent = new Intent(); 
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
    intent.putExtra("duplicate", false); 
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name); 
    intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap); 
    intent.putExtra(Intent.EXTRA_TEXT, appID); 

    intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
    context.sendBroadcast(intent); 
} 

このショートカットでアプリケーションを開いたときに通知を受け取り、そこからいくつかのパラメータ(ショートカット名とID)を取得したいと考えています。 BroadcastReceiverで試してみましたが、ショートカットが作成されたときにのみ動作します。このショートカットを使ってアプリを開くと、BroadcastReceiverは私に何も与えません。

BroadcastReceiver rec = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.d(TAG, "intent received"); 
      if (intent.hasExtra(Intent.EXTRA_TEXT)) { 
       Log.d(TAG, "Shortcut ID: " + intent.getIntExtra(Intent.EXTRA_TEXT, 0)); 
       Log.d(TAG, "Shortcut name: " + intent.getStringExtra(Intent.EXTRA_SHORTCUT_NAME)); 
      } 
     } 

    }; 

    IntentFilter filter = new IntentFilter("com.android.launcher.action.INSTALL_SHORTCUT"); 
    context.registerReceiver(rec, filter); 

通知を受け取るにはどうすればよいですか?

答えて

1

私はアプリはこのショートカットで

を開いたときにあなたのSplashActivityが開始され、いくつかの通知を取得したいです。他の目的でそのアクティビティを使用していて、その2つを区別したい場合は、ショートカットをSplashActivityにしないでください。

このショートカットでアプリを開くと、BroadcastReceiverは何も表示しません。

正しいです。

最初に、ホーム画面があなたのINSTALL_SHORTCUTリクエストに注意を払う必要はありません。

第2に、ユーザーがそのショートカットをタップすると、ホーム画面が何らかのブロードキャストを送信する必要はありません。予想されるのは、ホーム画面がそのショートカットに関連付けられたアクティビティを開始することだけです。

+0

実際には、同じアクティビティを起動するためにいくつかのショートカットを使用したいと思います(Googleプレイではなく、内部使用のため、心配しないでください)。 SplashActivityは、ショートカットIDに基づいて次に何を開始するのかを決定しません。それは可能ですか? –

+1

@AndreyRankov:あなたは 'shortcutIntent'に別のものを置くことができます。私は 'SplashActivity'でそれらを得ることは期待しませんが、場合によってはうまくいくかもしれません。 – CommonsWare

+0

いいえ、それは私のために働かない。私はフィルターを変更しましたが、BroadcastReceiverはshortcutIntentを検出できません –