没有导航回MainActivity

时间:2018-01-08 15:47:36

标签: android taskstackbuilder

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

enter image description here

            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 个答案:

答案 0 :(得分:0)

请试试这个

    <activity
        android:name=".Main2Activity"
        android:parentActivityName=".MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>

答案 1 :(得分:0)

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

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

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

为清晰而编辑

  @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);
    }

答案 2 :(得分:0)

  

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

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

  

notificationManager.notify(1234,通知);

所以它导航回主屏幕,因为Android操作系统因为在getPendingIntent中有1234个请求代码而在MainActivity上思考它。

****解决方法是:****将来自1234的 getPendingIntent()方法的requestCode更改为任意随机数我将其更改为0并且对我有效。

答案 3 :(得分: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);