我是靠谱客的博主 大胆樱桃,最近开发中收集的这篇文章主要介绍android 在锁频界面直接打开自己的应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

用到WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED,使在锁屏界面就能打开自己的应用,在onCreat中添加:

Window win = getWindow();

           WindowManager.LayoutParams params =win.getAttributes();

           params.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED

                  | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD

                  | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON

                  | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;

          win.setAttributes(params);

 

在用的过程中,一切都很顺利,不过在一个singletask模式的Activity出现了问题.当跳转到singletask模式的Activity,会先闪烁显示锁屏界面,然后跳转到该界面,这是什么原因?

 

分析原因:

SingletaskActivity会启动一个新的任务栈,而原先的任务栈就会退出,而新启动的任务栈上只有一个设置为singletaskActivity,这个时候,activity还没有显示出来,就会先显示锁屏界面了.

问题解决:

如果要解决此问题,而且还要保证该activity只有一个实例,那么要怎么做?

查看Activity4种启动模式:standardsingletasksingletopsingleinstance

其中singletop模式为:如果当前任务栈顶为该activity,则启用当前的任务栈顶的实例,执行onNewIntent()方法,如果没有就重新实例化一个。

了解到intent中有一个这样的flagIntent.FLAG_ACTIVITY_CLEAR_TOP,介绍文档是这样说的:

If set, and the activity beinglaunched is already running in the current task, then instead of launching anew instance of that activity, all of the other activities on top of it will beclosed and this Intent will be delivered to the (now on top) old activity as anew Intent.

For example, consider a taskconsisting of the activities: A, B, C, D. If D calls startActivity() with anIntent that resolves to the component of activity B, then C and D will befinished and B receive the given Intent, resulting in the stack now being: A,B.

大概的意思就是:在启动对应activity的时候清除当前任务栈顶的实例,如果任务栈中有此类型的实例,结束此实例,并且重新实例化一个。

 结合singletop模式和Intent.FLAG_ACTIVITY_CLEAR_TOP,在启动Activity的intent中添加flag:Intent.FLAG_ACTIVITY_CLEAR_TOP,也就相当于实现了singletask的模式,替换使用此模式,解决该问题

 

 

最后

以上就是大胆樱桃为你收集整理的android 在锁频界面直接打开自己的应用的全部内容,希望文章能够帮你解决android 在锁频界面直接打开自己的应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部