日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android超时退出功能解决方案

發布時間:2025/6/15 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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超时退出功能解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。