我有一个名为“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
...但总是没有成功
我为此疯狂......
有人可以帮助我吗?
提前致谢!
答案 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中的通知。 通过输入每个活动,您可以将意图更改为所需活动并发出相同的通知并更新上一个通知。