首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从通知中打开活动

从通知中打开活动
EN

Stack Overflow用户
提问于 2013-07-30 16:24:26
回答 2查看 87关注 0票数 0

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

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

单击收到的通知,打开活动"C“。

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

代码语言:javascript
运行
复制
//...
    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 ...but总是没有成功

我都快疯了.

有人能帮我吗?

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2013-07-30 16:31:01

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

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

票数 0
EN

Stack Overflow用户

发布于 2016-06-05 12:06:45

你需要做的是定义你在最后的位置。下面是我将如何处理这件事:

创建一个类,并从应用程序类扩展它

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

每个活动的OnDestroy中的

将该特定变量重置为其默认值。

在你的服务中,在制定意图之前,检查你最后的状态,并在此基础上制定你的意图。

代码语言:javascript
运行
复制
public class MY_APPLCIATION extends Application {
    public static Boolean ActivityAIsRunning=false;
    public static Boolean ActivityBIsRunning=false;
}

覆盖两个活动的onResume和onDestroy:

代码语言:javascript
运行
复制
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:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17941870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档