我想从通知开始活动.我想开一个活动,这是其他一些活动的继承者.
示例活动: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 – 使用保留/创建活动堆栈重定向到活动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)