1
PendingIntent
を同じアクティビティで使用しようとしています。 MainActivity
が既に実行されていて、アプリが通知を受け取った場合、この通知がクリックされるとTestFragment
クラスがロードされますが、ここでは該当しません。通知がクリックされても何も起こりません。PendingIntentは目的のフラグメントを起動しません
Intent intent = new Intent(mContext, MainActivity.class);
intent.putExtra("NOTIFICATION", "notify");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Long.toString(System.currentTimeMillis()));
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(mContext)
.setContentIntent(pendingIntent)
.setContentTitle(title)
.setSmallIcon(R.drawable.logo)
.setLargeIcon(bitmap)
.setPriority(Notification.PRIORITY_MAX)
.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(1, notification);
しかし、私はちょうどIntent
とPendingIntent
ためにこのコードを使用する場合、私はそれが二回の活動を作成するしかしTestFragment
をロードするために取得します。デフォルトのビューの上にTestFragmentをロードします。 MainActivity.class に通知意図
Intent intent = new Intent(mContext, MainActivity.class);
intent.putExtra(NOTIFICATION, true);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent =
PendingIntent.getActivity(mContext, 100, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
に余分
private static final String NOTIFICATION = "notification";
を渡す
Intent intent = new Intent(mContext, MainActivity.class);
intent.putExtra("NOTIFICATION", "notify");
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);
MainActivity.classのonCreate()
String notificationIntent = getIntent().getStringExtra("NOTIFICATION");
if(notificationIntent != null) {
if (notificationIntent.equals("notify")) {
TestFragment fr = new TestFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.frame_container, fr);
fragmentTransaction.commit();
}
} else {
//default view
}
何 'のように見えるonNewIntent'のでしょうか? – pskink
@pskink onNewIntentをオーバーライドしませんでした – user9123
** onNewIntent ** *これは、パッケージのlaunchModeを "singleTop"に設定するアクティビティ、またはstartActivity(Intent)を呼び出すときにクライアントがFLAG_ACTIVITY_SINGLE_TOPフラグを使用した場合に呼び出されます。いずれの場合も、アクティビティの新しいインスタンスではなく、アクティビティスタックの先頭にアクティビティが再起動されると、再起動に使用されたインテントを持つ既存のインスタンスに対してonNewIntent()が呼び出されますそれ* – pskink