0

当我单击通知时,我应该被导航到Main2Activity,当我单击后退按钮时,Main2Activity我应该被导航回MainActivity但我被导航回主屏幕。我的代码有什么错误吗?

在此处输入图像描述

            NotificationCompat.Builder  noti = new NotificationCompat.Builder(MainActivity.this);
            noti.setContentTitle("Message for you!");
            noti.setContentText("Hi!!This is message for you");
            noti.setSmallIcon(R.drawable.ic_launcher_background);
            noti.setTicker("app name:message app");
            noti.setAutoCancel(true);


            Intent intent = new Intent(MainActivity.this,Main2Activity.class);

            TaskStackBuilder taskStackBuilder=TaskStackBuilder.create(MainActivity.this);
            taskStackBuilder.addParentStack(MainActivity.class);
            taskStackBuilder.addNextIntent(intent);

            PendingIntent pendingIntent= 
  taskStackBuilder.getPendingIntent(1234,PendingIntent.FLAG_UPDATE_CURRENT);
            noti.setContentIntent(pendingIntent);

            Notification notification=noti.build();
            NotificationManager notificationManager = (NotificationManager) 
            getSystemService(NOTIFICATION_SERVICE);
            notificationManager.notify(1234,notification);

Mainifest.XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sainathpawar.notifications">

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Main2Activity"
        android:parentActivityName=".MainActivity">

        <intent-filter>
            <action android:name="second_filter" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

4

4 回答 4

0

请试试这个

    <activity
        android:name=".Main2Activity"
        android:parentActivityName=".MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>
于 2018-01-08T16:15:00.463 回答
0

这是因为您不在堆栈中。您只启动了一项活动。您的默认 MainActivity 尚未创建或启动。

您可以在 OnMenuItemSelected 回调中使用 android.R.id.home 处理后退按钮按下,并将它们重定向到您想要的任何位置。您也可以尝试“父活动”路线,但我不确定在没有父上下文的情况下从通知启动时它是如何工作的。

如果您走那条路,请更新以告知我们它是否适合您。否则,您也可以轻松使用我的答案。

为清晰而编辑

  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                startActivity(Main2Activity.this, MainActivity.class);
                return true;
                finish();
        }

        return super.onOptionsItemSelected(item);
    }
于 2018-01-08T16:23:32.820 回答
0

PendingIntent您可以通过以下方式实现此目的TaskStackBuilder

Intent parentIntent = new Intent(this, MainActivity.class);
parentIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
Intent resultIntent = new Intent(this, Main2Activity.class);

final PendingIntent pendingIntent = PendingIntent.getActivities(context, 0,
                new Intent[] {parentIntent, resultIntent}, PendingIntent.FLAG_UPDATE_CURRENT);

noti.setContentIntent(pendingIntent);
于 2018-01-09T05:18:33.140 回答
0

taskStackBuilder.getPendingIntent(1234,PendingIntent.FLAG_UPDATE_CURRENT); noti.setContentIntent(pendingIntent);

上面的代码有错误。如果我们在这里看到请求代码是 1234,与 notify 方法的 ID 相同

notificationManager.notify(1234,notification);

因此它正在导航回主屏幕,因为由于 getPendingIntent 中的 1234 请求代码,Android OS 认为它好像在 MainActivity 上。

****解决方案是:****将getPendingIntent()方法的 requestCode 从 1234 更改为任何随机数我将其更改为 0,它对我有用。

于 2018-01-08T18:27:28.380 回答