猿问

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

我有一个警报提醒,显示带有额外数据的通知。我想要做的是通过意图从我的通知发送额外的数据到我的主要活动,然后打开应用程序并调用该活动中的特定方法(位置信息)。该方法将打开一个新的活动,基于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);

这就是我如何称呼我的方法:


@Override

protected 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等等),但无法使其工作


慕斯王
浏览 168回答 2
2回答

SMILET

在评论(以上)的讨论中,您表示您正在使用launchMode="singleTask". 这是一种特殊的启动模式,您的应用程序不需要。它通常会产生比解决的更多的问题。请删除特殊启动模式,看看是否有帮助。完成此操作后,在应用未运行时点击通知应启动应用并创建MainActivity.也有可能你不能做你想做的事,onCreate()因为你Fragment还没有设置好。您可能只需要记住您想要做什么(开始位置详细信息),onCreate()但延迟实际操作,直到onResume()或在您设置了Fragments 或其他任何内容之后。

慕码人8056858

我想你需要这个if (getIntent().hasExtra("fromNotification")) {&nbsp; &nbsp; String locationId = getIntent().getStringExtra("locationId");&nbsp; &nbsp; CallFetchLocationInfoFromMapsFragment(locationId);}以及在清单中为您的活动设置singleTask启动模式<activity android:name=".YourActivity"&nbsp; &nbsp; &nbsp; &nbsp; android:launchMode="singleTask">&nbsp; &nbsp; ...</activity>
随时随地看视频慕课网APP

相关分类

Java
我要回答