Android OnNewIntent not called

后端 未结 3 1799
旧巷少年郎
旧巷少年郎 2020-12-10 04:48

I saw several approaches and I tried everything but couldnt make it work.I dont know why it is so complicated, in the docs it looks so easy! I want to trigger the OnNewInten

相关标签:
3条回答
  • 2020-12-10 04:51

    As first, you should add android:launchMode="singleTop" to your activity definition in manifest file like below

    <activity
        android:name="MainActivity"
        android:launchMode="singleTop"
    </activity>
    

    Then like Hasan Masud said that, you should add Intent.ACTION_MAIN and Intent.CATEGORY_LAUNCHER to your action like below

    Intent intent = new Intent(this, MainActivity.class);
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    

    That's all. With this way, if the app is open and when you click the notification, onNewIntent(..) method will trigger but whatever happens, if the app is close, when you click the notification, notification intent will go to the onCreate(..) method of current Activity.

    0 讨论(0)
  • 2020-12-10 04:57

    Ok got it working soon after posting my question. I think the key difference in our code is that I pass the flag "PendingIntent.FLAG_UPDATE_CURRENT" to the creation/retrieval of the PendingIntent object. This post helped me figure that out.

    Notification.Builder mBuilder =
                    new Notification.Builder(context)
                    .setSmallIcon(R.drawable.notifyicon)
                    .setContentTitle(title)
                    .setContentText(extras.getString("message"))
                    .setAutoCancel(true)
                    .setOnlyAlertOnce(false)
                    .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                    .setVibrate(new long[] {0,500,250,500});
    
            if(badgeCount > 1)
                mBuilder.setNumber(badgeCount);
            // Creates an explicit intent for an Activity in your app
            Intent resultIntent = new Intent(context, SiteViewActivity.class);
            resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            resultIntent.putExtra(NOTIFY_INTENT_TYPE_KEY, alertType);
    
            PendingIntent resultPendingIntent = PendingIntent.getActivity(context, alertType, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
            mBuilder.setContentIntent(resultPendingIntent);
            NotificationManager notifyMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            notifyMgr.notify(alertType, mBuilder.build());
    
    0 讨论(0)
  • 2020-12-10 05:13

    After long inspection i noticed that Android 4.4 (Kitkat and maybe lower) won't call onNewIntent and onResume neither if you use FLAG_UPDATE_CURRENT on pendingIntent. Once you change it to FLAG_ONE_SHOT it will start working. on Android 6 (and probably also 5) however onNewIntent works even with FLAG_UPDATE_CURRENT flag.

    However, it seems that if you create multiple pending intents (eg after receiving two notifications) the data will not be updated with flag FLAG_ONE_SHOT, so flag FLAG_CANCEL_CURRENT may be a better choice (it has no issue with not updated data)

    0 讨论(0)
提交回复
热议问题