java– 使用保留创建活动堆栈重定向到活动

java– 使用保留创建活动堆栈重定向到活动,第1张

概述我想从通知开始活动.我想开一个活动,这是其他一些活动的继承者.示例活动:IntroActivity–>照片–>SpecificPhoto.我想要实现的目标:如果用户点击通知,我想打开SpecificPhoto活动.请记住,该应用程序可以正在运行(例如,显示PhotosActivity),或者可以关闭它.>我想保留后退按钮功

我想从通知开始活动.我想开一个活动,这是其他一些活动的继承者.

示例活动:IntroActivity – >照片 – > SpecificPhoto.我想要实现的目标:如果用户点击通知,我想打开SpecificPhoto活动.请记住,该应用程序可以正在运行(例如,显示PhotosActivity),或者可以关闭它.

>我想保留后退按钮功能(按下后移动到PhotosActivity).
>点击通知时,我需要启动IntroActivity,因为用户需要在此处登录以防万一.

我试过跟随(在活动中使用常量,代码):

在PhotosActivity onCreate上:
redirectToActivity();

RedirectToActivity方法:

private voID redirectToActivity() {    Intent intent = getIntent();    int activityCode = intent.getIntExtra("code", 0);    switch (activityCode) {        case SpecificPhotoActivity.CODE:            startActivity(new Intent(this, SpecificPhotoActivity.class));            break;        default:            return;    }}

通过应用这种方法,我可以遍历整个活动堆栈并转到我想要的活动.但是,这种方法并不适用于所有情况.有时,activity_code没有设置(不知道为什么),因此我们以第一个活动结束.

有没有更专业的方法来解决这个问题?我相信这必须在许多应用中以某种方式解决.

解决方法:

你想要的是TaskStackBuilder.

以下是构建意图的方法,该方法将导航到SpecificPhotoActivity:

    Intent action = new Intent(context, SpecificPhotoActivity.class);    PendingIntent pendingIntent = TaskStackBuilder.create(context)            .addNextIntentWithParentStack(action)            .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

为了正确指定活动堆栈,您应该在清单文件中提供androID:parentActivityname:

<application ...>    <activity androID:name=".SpecificPhotoActivity"        androID:parentActivityname=".PhotosActivity"/></application>

使用此参数指定,SpecificPhotoActivity的父级是PhotoActivity,因此只要在SpecificPhotoActivity中单击后退按钮,TaskStackBuilder就会理解在哪里导航.

通知的构建如下:

    notificationmanager manager = (notificationmanager) getSystemService(NOTIFICATION_SERVICE);    Notification notification = new NotificationCompat.Builder(this)            .setContentTitle(...)            .setContentText(...)            .setSmallicon(...)            .setContentIntent(pendingIntent)            .build();    manager.notify(NOTIFICATION_ID, notification);

现在,通知单击将打开SpecificPhotoActivity.单击后退按钮将导航到PhotosActivity.

剩下的是授权处理.我想您可以在构建通知期间理解用户是否被授权.因此,以下方法应该有效:

    PendingIntent pendingIntent = null;    if (authorized) {        Intent action = new Intent(context, SpecificPhotoActivity.class);        pendingIntent = TaskStackBuilder.create(context)                .addNextIntentWithParentStack(action)                .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);    } else {        Intent action = new Intent(context, IntroActivity.class);        action.putExtra("photos_flow", true);        pendingIntent = PendingIntent.getActivity(context, 0, action, 0);    }

现在,在成功授权后的IntroActivity内:

    voID onAuthorized() {        if(getIntent().getBooleanExtra("photos_flow", false)) {            // most possibly you should pass some ID into SpecificPhotoActivity's intent            Intent[] intents = new Intent[]{new Intent(this, PhotosActivity.class), new Intent(this, SpecificPhotoActivity.class)};            startActivitIEs(intents);            finish();        }    }
总结

以上是内存溢出为你收集整理的java – 使用保留/创建活动堆栈重定向到活动全部内容,希望文章能够帮你解决java – 使用保留/创建活动堆栈重定向到活动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1118510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存