Android超时退出功能解决方案
一些App鉴于安全性的考虑可能需要用户长时间不操作退出登陆界面的功能,百度各种方法,但是限于本身框架原因均无法实现
我的App框架是viewPager+fragment,而且每个fragment页面还嵌套了viewpager+fragment。由于需要禁止viewpager的左右滑动,改用点击按钮切换页面,所以viewPager自定义以便于禁止左右滑动,代码如下:
布局里引用这个ViewPager将禁止viewpager的左右滑动。这样如果要实现退出登陆提醒那就这么做。定义一个全局变量time获取当前时间,每次用户操作屏幕的时候都更新time,由于禁止了左右滑动,所以在主Activity中对viewPager添加点击事件会被阻止,为此只能在viewpager阻止滑动事件之前更新time变量。这样监听超时的操作只能通过Service实现。因为Activity里面无论你对viewpager还是页面的布局监听点击事件均会被阻止。 Service的方法如下: > public class TimeOutService extends Service { private MessageDialog exitInput; private String TAG = "TimeOutService"; public static boolean isTimeout; private Context mContext; private Timer mTimer;
@Override
public IBinder onBind(Intent intent) {return null;
}@Override
public void onCreate() {super.onCreate();LogUtil.w(TAG, "onCreate");mContext = this;mTimer = new Timer();mTimer.scheduleAtFixedRate(new TimerTask() {@Overridepublic void run() {if ((System.currentTimeMillis() - FaisAppConfig.time) > 3 * 60 * 1000) {Message msg = new Message();msg.what = 0x1234;handler.sendMessage(msg);}}}, 0, 2000);
}private Handler handler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message message) {LogUtil.w(TAG, "长时间未操作");if (HeartService.isShowing)LogUtil.w(TAG, "已经有对话框打开");if (message.what == 0x1234 && !HeartService.isShowing) {LogUtil.w(TAG, "打开对话框");mTimer.cancel();exitInput = MessageDialog.getInstence(mContext);exitInput.setCanceledOnTouchOutside(false);exitInput.setCustomDialog("长时间未操作,请重新登录", "", "确定");String packname = mContext.getPackageName();PackageManager pm = mContext.getPackageManager();boolean permission = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.SYSTEM_ALERT_WINDOW", packname));if (permission) {exitInput.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);} else {exitInput.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);}exitInput.setOnPositiveListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {exitInput.dismiss();stopSelf();Intent intent = new Intent(getBaseContext(), LoginActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);}});exitInput.show();}return false;}
});@Override
public int onStartCommand(Intent intent, int flags, int startId) {return super.onStartCommand(intent, flags, startId);
}@Override
public void onDestroy() {super.onDestroy();FaisAppConfig.time = System.currentTimeMillis();exitInput = null;if (null != mTimer) {mTimer.cancel();mTimer = null;}Intent i = new Intent();i.setClass(TimeOutService.this, HeartService.class);stopService(i);LogUtil.w(TAG, "onDestroy");
}
}
复制代码
另外在Service中打开对话框的话需要设置为悬浮窗打开方式,所以必须添加***SYSTEM_ALERT_WINDOW 这项属于特殊权限,6.0以上系统需要特殊处理***
转载于:https://juejin.im/post/5a31dc4ef265da431876c16d
Android超时退出功能解决方案相关推荐
- android app 退出功能,Android 应用技巧: 手把手教你 优雅实现 “一键退出 App”
前言 在 Android开发中,会经常存在 "一键退出App" 的需求 但市面上流传着 太多不可用的"一键退出App"功能实现 本文将全面总结"一键退 ...
- android app 退出功能,Android 完美退出 App (Exit)
最近两天为了解决Android上面退出程序问题折腾了半死,在google & baidu 上面找了很久.很久出来的完全千篇一律,说的方法有三,但是经过我试验后全部不行. 三个方法分别是: ki ...
- Android实现退出提示的功能
摘要:本文主要是实现在Android中退出提示的功能,平常使用Android手机时,点击返回键时,由于不小心点击返回键过快,导至程序返回试界面之后直接退出程序,导至用户还要再重新登录一次.为解决此类问 ...
- 如何添加Android返回键的退出功能
环境:Cocos2dx v3.5 经网上搜索资料知道有两种方法可以实现Android返回键的退出功能,下面分别说明. 1.修改java代码 首先,在Cocos2dx的源文件中找到Cocos2dxGLS ...
- oracle设置密码复杂度、设置oracle超时退出的功能
查看oracle是否启用密码复杂度: select limit from dba_profiles where RESOURCE_NAME='PASSWORD_VERIFY_FUNCTION' and ...
- 【SpringBoot项目实战+思维导图】瑞吉外卖①(项目介绍、开发环境搭建、后台登陆/退出功能开发)
文章目录 软件开发整体介绍 软件开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型 技术选型 功能架构 角色 开发环境搭建 数据库环境搭建 创建数据库 数据库表导入 数据库表介绍 Ma ...
- Android开发常用功能 https://www.2cto.com/kf/201611/561847.html
Android开发常用功能 2016-11-03 09:43:58 来源:EvanJames的专栏 收藏 我要投稿 1.定时器的实现 (1)采用Handler的postDelay ...
- android 点击退出账号,Android应用退出登录的实现方法
每一个app都会有一个"退出登陆"的功能,当点击退出之后需要将所有的Activity都finish掉,开始是想将栈中的所有Activity清除掉,但是没有找到方法,后来用广播实现了 ...
- [转载]一个任务超时退出的装饰器,用起来真方便
来源:Python技巧 | 一个任务超时退出的装饰器,用起来真方便~ 本篇装饰器的写法,倒是蛮值得学习的,贴一下. 文章目录 1 任务超时退出 2 日志记录 3 缓存 4 约束某个函数的可执行次数 1 ...
最新文章
- a和a数值大小 计算机,Java求s=a+aa+aaa+aaaa+aa...a的值
- 算法:快速排序实现 定制比较函数
- C++类构造函数中的成员初始化
- 数学图形(1.5)克莱线
- 16-margin的用法
- XML Schema --simpleType
- 三角形面积 java_java编程中求三角形面积肿么写?
- Mysql/Mariadb本地不可以登录,远程可以登录问题的解决
- java一个简单的管理系统
- 厦门大学计算机系录取分数线贵州,贵州省多少名可以进厦门大学?附厦门大学近三年录取分数线...
- 解决Hadoop Browse Directory Couldn‘t upload the file 错误.无法上传文件
- 浅谈强缓存和协商缓存
- XR迈向10亿级必须解决的3个问题
- 人工智能算法对发明创造的知识产权保护
- SEO优化操作流程是怎样的
- 数据库审计系统在加密传输场景下的应用(SinoDB)
- 一个SQL获取某股票连续上涨的天数
- OPNET报错总结及注意事项
- 好书读不完,常存常读常更新
- 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义