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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

应用锁实现介绍 支持5.0

發(fā)布時間:2024/1/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 应用锁实现介绍 支持5.0 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

現(xiàn)在通用的應用鎖實現(xiàn) 都是啟動一個service一直在后臺,判斷啟動的應用在我們的鎖內(nèi),就啟動我們的鎖屏界面。


public class HookService extends Service {public final static String TAG = "TestService";private ActivityManager mActivityManager;private String mLastPackageName = "";@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();mActivityManager = (ActivityManager) getSystemService("activity");checkWindow();}Handler mHandlertoast = new Handler() {@Overridepublic void handleMessage(Message msg) {LockHelper.getInstance().unLock(HookService.this, null, mLastPackageName);}};private void checkWindow() {new Thread() {@Overridepublic void run() {while (true) {fun();try {Thread.sleep(100);} catch (InterruptedException e) {}}}}.start();}private void fun() {String[] activePackages;if (Build.VERSION.SDK_INT > 20) {activePackages = getActivePackages();} else {activePackages = getActivePackagesCompat();}if (activePackages != null) {for (String activePackage : activePackages) {if (activePackage.equals("com.myth.cici")) {if (!activePackage.equals(mLastPackageName)) {mLastPackageName = activePackage;mHandlertoast.sendEmptyMessage(0);}}}}}String[] getActivePackagesCompat() {final List<ActivityManager.RunningTaskInfo> taskInfo = mActivityManager.getRunningTasks(1);final ComponentName componentName = taskInfo.get(0).topActivity;final String[] activePackages = new String[1];activePackages[0] = componentName.getPackageName();return activePackages;}private String[] getActivePackages() {final Set<String> activePackages = new HashSet<String>();final List<ActivityManager.RunningAppProcessInfo> processInfos = mActivityManager.getRunningAppProcesses();for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {activePackages.addAll(Arrays.asList(processInfo.pkgList));}}return activePackages.toArray(new String[activePackages.size()]);} }

5.0以上使用getActivePackages();以下則使用getRunningAppProcesses。

判斷獲取到的活動的應用包名和我們鎖住的包名是否一致,一致則還要判斷是否是上次已經(jīng)解鎖了的,防止一直解鎖,然后就啟動我們的鎖屏界面了。

這只是個基本的部分,正式的還需要解決很多問題。比如Service被殺死了怎么辦等。



總結

以上是生活随笔為你收集整理的应用锁实现介绍 支持5.0的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。