gpt4 book ai didi

android - 如何将 Activity 带到前台(如果不存在则创建)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:28:47 25 4
gpt4 key购买 nike

我正在拦截带有一些信息的短信。然后在我的 SmsListener 中创建通知以显示在状态栏中。然后,当用户点击我想要的通知时

  1. 将 MainActivity 置于前台(如果此类 Activity 尚不存在,则应创建它)
  2. 将短信中的数据传递给它
  3. 根据此 MainActivity 中的数据执行一些 ui 更改

我的 Activity 定义为

    <activity
android:name=".MainActivity"
android:screenOrientation="sensor"
android:label="@string/app_name"
android:launchMode="singleTask"/>

Activity 启动为

 Intent i = new Intent();
i.setClass(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

同样在我的 Activity 中,我重写了 onNewActivity 方法

 @Override
public void onNewIntent(Intent intent){
super.onNewIntent(intent);

// I have data from broadcast in intent variable passed to this activity
processDataFromBroadcast(intent);
}

如果 MainActivity 已经存在,它工作正常,但如果 MainActivity 不存在,它会启动,但是没有调用 onNewIntent

然后我尝试从 onCreate 调用 processDataFromBroadcast:processDataFromBroadcast(getIntent())。第一次数据从我的广播正确传递到 Activity 。但是,如果 MainActivity 被发送到后台,然后再次被带到前台,则调用 onCreate 或 onNewIntent 并再次执行 processDataFromBroadcast 并通过广播发送 Intent ,因此每次应用程序被带到前台时,我的 MainActivity 都会使用来自广播的数据进行更新 -后者是不需要的,我怎样才能让我的 Activity 在第一次处理后忘记这个 Intent 。 Here is sample application.

最佳答案

对于只启动一个自身实例的 Activity ,请查看 <activity> list 元素,特别是 android:launchMode .你想用 singleTask 配置它或 singleInstance .

要将数据传递给您的 Activity ,请将数据添加到 Intent你用来打开它。要有 Intent 地传递数据,请使用 putExtra()发送之前的 Intent 方法,以及getExtra()在您的接收 Activity 中检索它们的方法。

我假设您大致了解 Intent 的工作原理,但如果不知道,您可以通过查看 this 了解更多关于 Intent 的信息。 Android 开发者文章。

关于android - 如何将 Activity 带到前台(如果不存在则创建)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4905599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com