生活随笔
收集整理的這篇文章主要介紹了
应用锁实现介绍 支持5.0
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
現(xiàn)在通用的應(yīng)用鎖實(shí)現(xiàn) 都是啟動(dòng)一個(gè)service一直在后臺(tái),判斷啟動(dòng)的應(yīng)用在我們的鎖內(nèi),就啟動(dòng)我們的鎖屏界面。
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。
判斷獲取到的活動(dòng)的應(yīng)用包名和我們鎖住的包名是否一致,一致則還要判斷是否是上次已經(jīng)解鎖了的,防止一直解鎖,然后就啟動(dòng)我們的鎖屏界面了。
這只是個(gè)基本的部分,正式的還需要解決很多問(wèn)題。比如Service被殺死了怎么辦等。
總結(jié)
以上是生活随笔為你收集整理的应用锁实现介绍 支持5.0的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。