【问题标题】:Avoid the current activity finish when shart a notification分享通知时避免当前活动完成
【发布时间】:2016-08-30 09:42:30
【问题描述】:

我想在当前Activity 中启动通知,即ChatActivity。当我按下通知时,我想输入ChatOneActivity

但是,当我在 ChatOneActivity 中时,我不希望当前的 ChatActivity 完成。因为我正在接收数据,当我按下返回按钮时,我想留在ChatActivity

关键是我不希望ChatActivity 结束,无论我目前在哪个Activity

那我该怎么办?

这里是代码

private void showNotification(String id, String message) {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext())
    .setSmallIcon(android.R.drawable.sym_action_email)
    .setContentTitle("You have a new message")
    .setContentText(message);
    Intent intent = new Intent(ChatActivity.this,ChatOneActivity.class);
    intent.putExtra("toId", id);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(ChatActivity.this);
    stackBuilder.addParentStack(ChatOneActivity.class);
    stackBuilder.addNextIntent(intent);
    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_CANCEL_CURRENT);
    builder.setContentIntent(pendingIntent);
    NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(1, builder.build());
}

问题是:

现在我输入ChatOneActivity,当我按下返回按钮时,我返回到桌面。表示ChatActivity 已经完成,我不想要。

这里是主线

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.webmobilegroupchat"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="16" />

<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.webmobilegroupchat.MainActivity"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name="com.example.webmobilegroupchat.ChatActivity"
        android:label="@string/title_activity_chat" >
    </activity>
    <activity
        android:name="com.example.webmobilegroupchat.ChatOneActivity"
        android:label="@string/title_activity_chat_one" >
    </activity>
    <activity
        android:name="com.example.webmobilegroupchat.SplashActivity"
        android:label="@string/title_activity_splash" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

【问题讨论】:

  • 考虑为这些类型的长时间运行的任务使用Service
  • 我认为TaskStackBuilder有问题。
  • 能否请您出示这些Activity的清单声明
  • 我已添加清单

标签: android


【解决方案1】:

在 ChatOneActivity 活动上试试这个。

  @Override
  public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(getApplicationContext(),ChatActivity.Class);
    startActivity(intent);
}

【讨论】:

    【解决方案2】:

    您的代码在创建通知方面看起来不错,但您必须在 Manifest 中定义父活动才能返回,stackBuilder.addParentStack 假设您在 Manifest 中也为 API 16+ 定义了它:

    <activity android:name=".ChatOneActivity"
        android:parentActivityName=".ChatActivity"
        ... />
    

    对于

    <activity android:name=".ChatOneActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".ChatActivity" />
    

    【讨论】:

    • 现在当我按下返回按钮时,它会返回到 ChatActivity。但是ChatActivity已经完成了。有什么我可以避免这种情况的原因吗?(如果不使用服务)
    • 不完全理解,您想导航回您在上面的问题中提到的 ChatActivity 吗?
    • 我的意思是你的代码看起来不错。但是当我按下通知时,会调用 onDestory。我不知道为什么。这意味着 ChatActivity 被系统杀死了
    • 好像在旋转屏幕的时候会调用onDestory和onCreate,这些方法是系统调用的。而且我没有调用完成方法
    • 是的,虽然可以改变方向,但您可以通过将方向锁定为纵向/横向一种模式来确认它,如果对您有帮助,请记住接受问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多