为了账号安全,请及时绑定邮箱和手机立即绑定

当应用程序未运行时,无法从通知中调用活动方法

当应用程序未运行时,无法从通知中调用活动方法

慕斯王 2021-07-09 18:35:59
我有一个警报提醒,显示带有额外数据的通知。我想要做的是通过意图从我的通知发送额外的数据到我的主要活动,然后打开应用程序并调用该活动中的特定方法(位置信息)。该方法将打开一个新的活动,基于locationId我已经通过。当我的应用程序在后台运行时效果很好,但是当它被杀死时,即当应用程序完全关闭时,它会打开应用程序的主要活动,但不调用该方法。我的通知代码用于有意发送数据:Intent intent = new Intent(this, MainActivity.class);intent.putExtra("fromNotification", true);intent.putExtra("locationId", locationId);intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP               | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);PendingIntent pendingIntent = PendingIntent.getActivity(this, 111, intent,               PendingIntent.FLAG_UPDATE_CURRENT);这就是我如何称呼我的方法:@Overrideprotected void onNewIntent(Intent intent) {    super.onNewIntent(intent);    setIntent(intent);    if (getIntent().hasExtra("fromNotification")) {        String locationId = getIntent().getStringExtra("locationId");        CallFetchLocationInfoFromMapsFragment(locationId);    }}我也尝试在我的主要活动的 onCreate 末尾添加它,这应该是解决方案,但它什么也没做:if (getIntent().hasExtra("fromNotification")) {    String locationId = getIntent().getStringExtra("locationId");    CallFetchLocationInfoFromMapsFragment(locationId);}我尝试了更多的解决方案(包括this、this、this、this、this、this、this等等),但无法使其工作
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

在评论(以上)的讨论中,您表示您正在使用launchMode="singleTask". 这是一种特殊的启动模式,您的应用程序不需要。它通常会产生比解决的更多的问题。请删除特殊启动模式,看看是否有帮助。完成此操作后,在应用未运行时点击通知应启动应用并创建MainActivity.

也有可能你不能做你想做的事,onCreate()因为你Fragment还没有设置好。您可能只需要记住您想要做什么(开始位置详细信息),onCreate()但延迟实际操作,直到onResume()或在您设置了Fragments 或其他任何内容之后。


查看完整回答
反对 回复 2021-07-14
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

我想你需要这个


if (getIntent().hasExtra("fromNotification")) {

    String locationId = getIntent().getStringExtra("locationId");

    CallFetchLocationInfoFromMapsFragment(locationId);

}

以及在清单中为您的活动设置singleTask启动模式


<activity android:name=".YourActivity"

        android:launchMode="singleTask">

    ...

</activity>


查看完整回答
反对 回复 2021-07-14
  • 2 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信