Android OnNewIntent not called

14,477

Solution 1

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());

Solution 2

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.

Share:
14,477

Related videos on Youtube

Aksiom
Author by

Aksiom

Updated on June 01, 2022

Comments

  • Aksiom
    Aksiom about 2 years

    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 OnNewIntent with a notification (the user clicks on it in the notification bar).

    Currently I have set my Activity as singleTop

    <activity
        android:name="-.-.-.MainMenuActivity"
        android:launchMode="singleTop"
        android:screenOrientation="portrait" >
    </activity>
    

    This is the code where I create the Notification:

    public void showNotification(String text, String componentId){
        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.logo)
                .setContentTitle("Title")   
                .setAutoCancel(true)
                .setContentText(text);
    
        // Creates an explicit intent for an Activity in your app
        Intent resultIntent = new Intent(this, MainMenuActivity.class);
        if(!componentId.equalsIgnoreCase("")){                         
            resultIntent.putExtra("componentId", componentId);
        }   
        resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
        PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, 0);
        mBuilder.setFullScreenIntent(resultPendingIntent, false);
        mBuilder.setContentIntent(resultPendingIntent);
        NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        // mId allows you to update the notification later on.
        mNotificationManager.notify(0, mBuilder.build());
    }
    

    This is the OnNewIntent method in my MainMenuActivity:

    @Override
    protected void onNewIntent(Intent intent) {
        // TODO Auto-generated method stub
        super.onNewIntent(intent);
        setIntent(intent);
    
        ...
    }
    

    I never get the OnNewIntent call. I dont know what I am doing wrong. I use only 2 activites in the whole app and the MainMenuActivity comes after the LoginActivity so the MainMenuActivity should always be on top of the stack anyways (I have more fragments where I replace them inside the MainMenuActivity).

    Any help would be appreciated! Thank you guys.

  • alena_fox_spb
    alena_fox_spb almost 8 years
    also you add 'alertType' value - it's a key to my same problem!! thnks!
  • Mars
    Mars over 6 years
    You are the best! It took me forever to find that you need to add Intent.ACTION_MAIN and INTENT.CATEGORY_LAUNCHER!!! I haven't seen it written anywhere...