2015-08-27 38 views
1

我想要做的是在Android中创建一个通知,当它被点击时将会打开一个活动。这个活动被称为“NotificationsActivity”,其父代是“MainActivity”。无论何时向用户展示NotificationsActivity,我都希望他们能够按下后退按钮以访问MainActivity。我一直在使用这里的说明(http://developer.android.com/guide/topics/ui/notifiers/notifications.html#DirectEntry)试图让这个工作。但是,无论我尝试什么,每当我从NotificationsActivity中按回时,该应用程序都会完全退出。我能想到的唯一问题是我的应用程序有一个登录屏幕,我也将其识别为MAIN和LAUNCHER。我不认为这会造成问题,但这是我能想到的。TaskStackBuilder没有按预期工作

总结。我要的是:

  1. 点击通知
  2. 打开NotificationsActivity
  3. 按返回
  4. 打开MainActivity

但是我得到的是:

  1. 点击通知
  2. 打开NotificationsActivity
  3. 按返回
  4. 退出应用

相关代码显示如下。

从AndroidManifest.xml中:

<activity 
    android:name=".LoginActivity" 
    android:label="@string/app_name" 
    android:launchMode="singleTop" 
    android:noHistory="true" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
<activity 
    android:name=".MainActivity" 
    android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
    </intent-filter> 
</activity> 
<activity 
    android:name=".NotificationsActivity" 
    android:parentActivityName=".MainActivity" > 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value=".MainActivity" /> 
</activity> 

这是我的Java代码:

private void notifyRecordChanges(){ 
    String notificationText = "test notification"; 
    Context context = this; 

    NotificationCompat.Builder builder = 
      new NotificationCompat.Builder(context) 
        .setSmallIcon(R.drawable.ic_notify) 
        .setAutoCancel(true) 
        .setContentText(notificationText); 
    // Creates an explicit intent for an Activity in your app 
    Intent resultIntent = new Intent(context, NotificationsActivity.class); 
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
    // Adds the back stack for the Intent (but not the Intent itself) 
    stackBuilder.addParentStack(NotificationsActivity.class); 
    // Adds the Intent that starts the Activity to the top of the stack 
    stackBuilder.addNextIntent(resultIntent); 
    PendingIntent resultPendingIntent = 
      stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
    builder.setContentIntent(resultPendingIntent); 
    NotificationManager notificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    notificationManager.notify(1, builder.build()); 
} 

编辑:我从项目中删除的LoginActivity类,它并没有区别。所以,现在我不知道我做错了什么。

SECOND EDIT: 要添加到Skizo的答案,我必须支持操作栏上的后退按钮。这是处理该问题的代码。我从Skizo提供的方法覆盖和下面的代码中调用“goBack”。

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()){ 
     case android.R.id.home: 
      goBack(); 
      break; 
    } 
    return super.onOptionsItemSelected(item); 
} 
private void goBack(){ 
    Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
    startActivity(intent); 
    finish(); 
} 
+0

是否有logcat的任何错误? –

+0

完全没有错误。通常如果应用程序崩溃,我甚至不会在最近的列表中看到它。但是,在这种情况下,它仍然在最近出现。 – nybblesAndBits

回答

1

NotificationsActivity只重载onBackPressed()

复制粘贴&这种方法:

@Override 
public void onBackPressed() { 
// super.onBackPressed(); 
Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
startActivity(intent); 
finish(); 
} 
+0

谢谢!那让我一半在那里。它只适用于硬件后退按钮。操作栏上的后退按钮仍然退出。我通过添加此代码来解决这个问题。算了。我无法让代码在这里正确显示。我将编辑帖子并放在那里。 – nybblesAndBits

+0

@nybblesAndBits所以你的问题解决了? –

+0

我应该添加一些东西给我的答案?如果你解决了这个问题,或者我帮助你解决它,感觉自由哟upvote或将其标记为正确^^ –