Android超时退出功能解决方案
生活随笔
收集整理的這篇文章主要介紹了
Android超时退出功能解决方案
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一些App鑒于安全性的考慮可能需要用戶長時間不操作退出登陸界面的功能,百度各種方法,但是限于本身框架原因均無法實現(xiàn)
我的App框架是viewPager+fragment,而且每個fragment頁面還嵌套了viewpager+fragment。由于需要禁止viewpager的左右滑動,改用點擊按鈕切換頁面,所以viewPager自定義以便于禁止左右滑動,代碼如下:
布局里引用這個ViewPager將禁止viewpager的左右滑動。這樣如果要實現(xiàn)退出登陸提醒那就這么做。定義一個全局變量time獲取當(dāng)前時間,每次用戶操作屏幕的時候都更新time,由于禁止了左右滑動,所以在主Activity中對viewPager添加點擊事件會被阻止,為此只能在viewpager阻止滑動事件之前更新time變量。這樣監(jiān)聽超時的操作只能通過Service實現(xiàn)。因為Activity里面無論你對viewpager還是頁面的布局監(jiān)聽點擊事件均會被阻止。 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, "已經(jīng)有對話框打開");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"); } } 復(fù)制代碼另外在Service中打開對話框的話需要設(shè)置為懸浮窗打開方式,所以必須添加***SYSTEM_ALERT_WINDOW?這項屬于特殊權(quán)限,6.0以上系統(tǒng)需要特殊處理***
轉(zhuǎn)載于:https://juejin.im/post/5a31dc4ef265da431876c16d
總結(jié)
以上是生活随笔為你收集整理的Android超时退出功能解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络实验五:虚拟局域网技术
- 下一篇: TableView的集合