一些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超时退出功能解决方案相关推荐

  1. android app 退出功能,Android 应用技巧: 手把手教你 优雅实现 “一键退出 App”

    前言 在 Android开发中,会经常存在 "一键退出App" 的需求 但市面上流传着 太多不可用的"一键退出App"功能实现 本文将全面总结"一键退 ...

  2. android app 退出功能,Android 完美退出 App (Exit)

    最近两天为了解决Android上面退出程序问题折腾了半死,在google & baidu 上面找了很久.很久出来的完全千篇一律,说的方法有三,但是经过我试验后全部不行. 三个方法分别是: ki ...

  3. Android实现退出提示的功能

    摘要:本文主要是实现在Android中退出提示的功能,平常使用Android手机时,点击返回键时,由于不小心点击返回键过快,导至程序返回试界面之后直接退出程序,导至用户还要再重新登录一次.为解决此类问 ...

  4. 如何添加Android返回键的退出功能

    环境:Cocos2dx v3.5 经网上搜索资料知道有两种方法可以实现Android返回键的退出功能,下面分别说明. 1.修改java代码 首先,在Cocos2dx的源文件中找到Cocos2dxGLS ...

  5. oracle设置密码复杂度、设置oracle超时退出的功能

    查看oracle是否启用密码复杂度: select limit from dba_profiles where RESOURCE_NAME='PASSWORD_VERIFY_FUNCTION' and ...

  6. 【SpringBoot项目实战+思维导图】瑞吉外卖①(项目介绍、开发环境搭建、后台登陆/退出功能开发)

    文章目录 软件开发整体介绍 软件开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型 技术选型 功能架构 角色 开发环境搭建 数据库环境搭建 创建数据库 数据库表导入 数据库表介绍 Ma ...

  7. Android开发常用功能 https://www.2cto.com/kf/201611/561847.html

    Android开发常用功能 2016-11-03 09:43:58          来源:EvanJames的专栏 收藏   我要投稿 1.定时器的实现 (1)采用Handler的postDelay ...

  8. android 点击退出账号,Android应用退出登录的实现方法

    每一个app都会有一个"退出登陆"的功能,当点击退出之后需要将所有的Activity都finish掉,开始是想将栈中的所有Activity清除掉,但是没有找到方法,后来用广播实现了 ...

  9. [转载]一个任务超时退出的装饰器,用起来真方便

    来源:Python技巧 | 一个任务超时退出的装饰器,用起来真方便~ 本篇装饰器的写法,倒是蛮值得学习的,贴一下. 文章目录 1 任务超时退出 2 日志记录 3 缓存 4 约束某个函数的可执行次数 1 ...

最新文章

  1. a和a数值大小 计算机,Java求s=a+aa+aaa+aaaa+aa...a的值
  2. 算法:快速排序实现 定制比较函数
  3. C++类构造函数中的成员初始化
  4. 数学图形(1.5)克莱线
  5. 16-margin的用法
  6. XML Schema --simpleType
  7. 三角形面积 java_java编程中求三角形面积肿么写?
  8. Mysql/Mariadb本地不可以登录,远程可以登录问题的解决
  9. java一个简单的管理系统
  10. 厦门大学计算机系录取分数线贵州,贵州省多少名可以进厦门大学?附厦门大学近三年录取分数线...
  11. 解决Hadoop Browse Directory Couldn‘t upload the file 错误.无法上传文件
  12. 浅谈强缓存和协商缓存
  13. XR迈向10亿级必须解决的3个问题
  14. 人工智能算法对发明创造的知识产权保护
  15. SEO优化操作流程是怎样的
  16. 数据库审计系统在加密传输场景下的应用(SinoDB)
  17. 一个SQL获取某股票连续上涨的天数
  18. OPNET报错总结及注意事项
  19. 好书读不完,常存常读常更新
  20. 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义

热门文章

  1. 分布式系统和集群的区别
  2. JQuery选择器大全
  3. c# response输出文件实例(14)
  4. 云朵机(人造云朵,造云机)用在互动百科推搜索新方法中(转)
  5. Linux的目录结构和头文件相关;哪里找- sys/types.h, sys/stat.h
  6. Quartus II工程文件的后缀含义
  7. int能表示的数据范围(在VS2017下,int和long都是32位)
  8. ROS 总结(二):创建URDF模型
  9. Ceph分布式存储高性能设计
  10. 不要争了,别的程序员是这么给变量起名的!