0

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

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

单击收到的通知,打开活动“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......但总是没有成功

我要疯了……

有人可以帮助我吗?

提前致谢!

4

2 回答 2

0

与其从 C 启动 Activity,不如在单击通知时发送广播,您的 Activity A 将收到该广播,然后 A 将启动您的 Activity C。

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

于 2013-07-30T08:31:01.183 回答
0

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

创建一个类并从 Application 类扩展它

在此处定义一个变量,它可以是布尔值、枚举、整数等...当您输入任何这些活动时,更改该参数。

在每个活动的 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;
    }
}

活动B:

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 中的通知。通过输入每个活动,您可以将意图更改为所需活动并发出相同的通知并更新最后一个通知。

于 2016-06-05T04:06:44.900 回答