【问题标题】:Close activity without showing it关闭活动而不显示它
【发布时间】:2021-01-04 05:36:10
【问题描述】:

我的代码中有两个活动,让 A&B。从 A 开始,我使用 Intent 启动 B,当 B 启动时,我启动通知。

现在的问题是,当我关闭通知时,如果 B 对用户可见,它应该返回到 A,否则当用户从最近的任务打开应用程序时,A 应该出现。

我的想法: 我想在 onResume 中将整数(visible)声明为 1,在 onPause 中声明为 0。所以我可以在 onCreate 中使用 if 来检查它。但是使用 onCreate,会调用 onResume如何克服这个问题?

编辑: 我正在尝试开发一个音乐播放器。 A 是文件选择器活动,B 是播放器活动。我需要在 B 本身中进行通知,因为它是使用服务的前台通知(我需要播放器在后台运行)。所以如果我在应用打开时关闭通知,播放器也必须关闭,否则下次我打开应用时,文件选择器必须再次显示。

【问题讨论】:

  • 请不要使用 android studio 标签,除非它专门针对 IDE 的某个功能

标签: java android activity-lifecycle


【解决方案1】:

这就是你想要做的。 甲类:

Intent intent = new Intent(this,b.class);
startActivity(intent);

protected void onPause(){
   super.onPause();
   showNotification();
}
public void showNotification()
{
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this,"channelID")
            .setSmallIcon(R.drawable.icon)
            .setContentTitle("Title")
            .setContentText("Description")
            .setAutoCancel(true);

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    int notificationId = 1;
    createChannel(notificationManager);
    notificationManager.notify(notificationId, notificationBuilder.build());
}

public void createChannel(NotificationManager notificationManager){
    if (Build.VERSION.SDK_INT < 26) {
        return;
    }
    NotificationChannel channel = new NotificationChannel("channelID","title", NotificationManager.IMPORTANCE_DEFAULT);
    channel.setDescription("Description");
    notificationManager.createNotificationChannel(channel);
}

所以,如果通知从通知栏中关闭/删除,你想这样做,而不是让你回到 A 类

然后,检查通知是否在 B 类中删除。

【讨论】:

  • 我认为您误解了我的问题(可能是因为我以一种奇怪的方式提出了这个问题)。我正在尝试开发一个音乐播放器。 A 是文件选择器活动,B 是播放器活动。我需要在 B 本身做通知,因为它是使用服务的前台通知(我需要播放器在后台运行)。所以如果我在应用程序打开时关闭通知,播放器也必须关闭,否则下次我打开该应用程序,必须再次显示文件选择器。
  • 因此,请检查B 类中的服务是否正在运行或停止。如果停止比finish()bActivity
  • 但是,有一个问题。如果我在前台打开另一个应用程序并关闭通知,我的应用程序会打开以显示文件选择器。我不希望这样,因为它会中断用户体验
  • @ADP 所以,你必须检查两次。用户是否在后台运行您的应用程序。如果不是,您可以轻松地做到这一点。如果服务关闭,则运行代码onDestroy,而不是什么都不做。如果用户在后台运行您的应用程序(音乐播放器)而不是您添加一个值onPause,那么如果用户停止服务而不是检查该值。然后,根据value 做事。您也可以在onDestroy 中添加价值。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多