如何在通知中重新打开活动点击我的android

时间:2013-04-26 05:52:08

标签: android android-intent notifications

我正在开发一个用户可以登录登录活动的应用程序。登录用户可以在仪表板活动中查看他们的评论。如果服务器中有任何新的评论,它将推送通知。一切都运行得很完美除了一件事情,即当用户点击通知时,如果仪表板活动在前面,它每次都会打开一个新的仪表板活动。

我想要的是,如果用户点击通知,它将仅在应用程序未运行时打开仪表板活动。否则如果仪表板活动在前面,那么如果用户点击它,它将首先关闭仪表板活动,然后它将重新打开活动页面。 以下是我编写的用于执行仪表板活动的代码。

    Intent startActivityIntent = new Intent(this, DashboardActivity.class); 
    startActivityIntent.putExtra("NotificationMessage", service_notification);
    startActivityIntent.putExtra("flag", 1);
    startActivityIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK| Intent.FLAG_ACTIVITY_NEW_TASK );
    PendingIntent launchIntent = PendingIntent.getActivity(this, 0,
            startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    earthquakeNotificationBuilder
                .setContentIntent(launchIntent)
                .setContentTitle(no_of_review + " " + "new review is there")
                .setAutoCancel(true);   

我尝试了很多但没有得到解决方案。谁能帮我?提前谢谢。

3 个答案:

答案 0 :(得分:3)

和你的androidmanifest.xml中的android:launchMode="singleTask"所以你可以和android:clearTaskOnLaunch="true

        <activity
            android:name=".DashboardActivity"
            android:launchMode="singleTask"
            android:clearTaskOnLaunch="true" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

答案 1 :(得分:1)

如果此代码打开,此代码将重新打开,否则app将重新开始

        ActivityManager am = (ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
        ActivityManager.RunningTaskInfo task = tasks.get(0); // get current task
        ComponentName rootActivity = task.baseActivity;

        Intent notificationIntent;
        if(rootActivity.getPackageName().equalsIgnoreCase("your package name")){
            //your app is open
            // Now build an Intent that will bring this task to the front
             notificationIntent = new Intent();
            notificationIntent.setComponent(rootActivity);
            notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

        }
        else
        {
//your app is not open,start it by calling launcher activity
             notificationIntent = new Intent(context, SplashActivity.class);


        }
        notificationIntent.setAction(Intent.ACTION_MAIN);
        notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
         notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);





        PendingIntent intent = PendingIntent.getActivity(context, 0,
                notificationIntent, 0);

//use this pending intent in notification..

请参阅完整示例HERE ..

答案 2 :(得分:0)

您正在做的是每次用户点击通知时您都在创建新活动。现在您需要做的是将此FLAG_ACTIVITY_CLEAR_TOP添加到您的意图中,并在 ManifestFile 中更改您的活动的 launchmode 。同时覆盖 DashboardActivity

中的 OnNewIntent()方法

以下是一些帮助您的代码

startActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

并像这样改变你的ManifestFile

 <activity 
  android:name=".DashboardActivity"
  android:launchMode="singleTop">
 </activity>

然后在您的DashBoard活动中覆盖OnNewIntent方法,如下所示

@Override
    protected void onNewIntent(Intent intent) {

        DashboardActivity.this.finish();

        // -----Start New Dashboard  when notification is clicked----

        Intent i = new Intent(DashboardActivity.this, DashboardActivity.class);

        startActivity(i);

        super.onNewIntent(intent);
    }

只要您的活动存在且点击通知,就会触发OnNewIntent方法

如果您希望自己的活动在不同情况下表现不同,也请研究launchmodes