从通知中打开活动

时间:2013-07-30 08:24:26

标签: android android-intent notifications android-activity

我有一个名为“A”的活动,带有两个按钮。每个按钮打开其他新活动“B”和“C”,活动“A”处于onPause状态。 活动“C”有一个3页的viewpager

此应用程序可以接收通知。

点击收到的通知,打开活动“C”。

这可以通过以下方式正确运行:

//...
    NotificationManager notificationManager =(NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); 
...
Intent intent =new Intent(getApplicationContext(), activityC.class);
        intent.putExtra("hello", notificationData);

这是我的问题:

我希望当您点击收到的通知时,如果我的应用程序显示活动“A”或“B”或应用程序在后台,则关闭并打开活动“C”

如果应用程序显示活动“C”,则会显示ViewPager的页面(pager.setCurrentItem (2);

我一直在阅读几天,我尝试了几种方法,使用android:launchMode="singleTop"定义FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_CLEAR_TOP and FLAG_ACTIVITY_SINGLE_TOP ...但总是没有成功

我为此疯狂......

有人可以帮助我吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

不是从C启动活动,而是在点击通知时发送广播,活动A将接收该广播,然后A将启动您的活动C.

您可以尝试为活动C设置FLAG_ACTIVITY_SINGLE_TOP,这样如果C已经在顶部,它将收到意图。

答案 1 :(得分:0)

您需要做的是定义最后的位置。 这是我如何处理这个:

  

创建一个类并从Application类

扩展它

在这里定义一个变量,它可以是boolean,enum,int等...... 当您输入任何这些活动时,请更改该参数。

  

在每个活动的OnDestroy中将该特定变量重置为其默认值。

     

在制作意图之前的服务中,检查你最后的状态,并根据它做出你的意图。

public class MY_APPLCIATION extends Application {
    public static Boolean ActivityAIsRunning=false;
    public static Boolean ActivityBIsRunning=false;
}

覆盖两个活动的onResume和onDestroy:

public class ActivityA extends AppCompatActivity {
    // ......
    @Override
    protected void onDestroy() {
        super.onDestroy();
        MY_APPLCIATION.ActivityAIsRunning=false;
    }

    @Override
    protected void onResume() {
        super.onResume();
        MY_APPLCIATION.ActivityAIsRunning=true;
    }
}

ActivityB:

public class ActivityB extends AppCompatActivity {
    // ......
    @Override
    protected void onDestroy() {
        super.onDestroy();
        MY_APPLCIATION.ActivityBIsRunning=false;
    }

    @Override
    protected void onResume() {
        super.onResume();
        MY_APPLCIATION.ActivityBIsRunning=true;
    }
}

现在有一个重要的注意事项你应该注意:

  

您应该在创建通知时定义意图!

你应该有另一项活动(我们称之为MY_NOTIFICATION_ACTIVITY)。 并且通知应始终转到此活动。 现在在该活动中检查设置了哪个布尔值,然后调用所需的活动(ActivityA或ActivityB或ActivityC)。不要忘记在你的清单中你应该制作ActivityB singleTop !!!

  

***另一种简单的方法

另一个简单的方法是更新每个活动的OnResume中的通知。 通过输入每个活动,您可以将意图更改为所需活动并发出相同的通知并更新上一个通知。