Android Notification打开当前正在运行的应用而不是创建新进程?

时间:2015-10-30 11:18:58

标签: java android android-notifications deep-linking uri-scheme

我正在接收带有自定义Uri方案的推送通知:myapp://main

在我onReceive我创建通知:

public void createNotification(Context context, String title, String message, String summary, Uri uri) {
    Notification.Builder notification = new Notification.Builder(context)
            .setContentTitle(title)
            .setContentText(message)
            .setSmallIcon(R.drawable.ic_launcher)
            .setDefaults(Notification.DEFAULT_LIGHTS)
            .setAutoCancel(true);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && summary != null)
        notification.setSubText(summary);


    Intent intent = new Intent("android.intent.action.VIEW", uri);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
    notification.setContentIntent(pendingIntent);

    Notification noti;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
        noti = notification.build();
    else
        noti = notification.getNotification();

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0, noti);
}

当我点击该通知时,它会打开一个新的活动,这是我的MainActivity。但似乎它创建了一个全新的流程,而不仅仅是打开我当前运行的应用程序。

是否遗失了一些标志?

2 个答案:

答案 0 :(得分:1)

你可以设置Intent如下,你在AndroidManifest.xml中指定的Intent动作和类别匹配

 Intent intent = new Intent()  
            .setAction(Intent.ACTION_VIEW)  
            .addCategory(Intent.CATEGORY_DEFAULT)  
            .addCategory(Intent.CATEGORY_BROWSABLE)
            .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                    Intent.FLAG_ACTIVITY_SINGLE_TOP) 
            .setPackage(getPackageName())
            .setData(uri);

答案 1 :(得分:1)

有活动的LaunchModes

android:launchMode=["multiple" | "singleTop" |"singleTask" | "singleInstance"]

详细了解LaunchMode here

这可以放在manifest的活动代码中。

要获取意图数据,请尝试onNewIntent()