このような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);
通知を受け取るにはどうすればよいですか?
実際には、同じアクティビティを起動するためにいくつかのショートカットを使用したいと思います(Googleプレイではなく、内部使用のため、心配しないでください)。 SplashActivityは、ショートカットIDに基づいて次に何を開始するのかを決定しません。それは可能ですか? –
@AndreyRankov:あなたは 'shortcutIntent'に別のものを置くことができます。私は 'SplashActivity'でそれらを得ることは期待しませんが、場合によってはうまくいくかもしれません。 – CommonsWare
いいえ、それは私のために働かない。私はフィルターを変更しましたが、BroadcastReceiverはshortcutIntentを検出できません –