Android編程獲取系統(tǒng)隱藏服務實現鎖屏的方法
本文實例講述了Android編程獲取系統(tǒng)隱藏服務實現鎖屏的方法。分享給大家供大家參考,具體如下:
實現原理:當按鎖屏鍵時,會發(fā)出一個廣播,當界面接收到一個廣播就可以實現鎖頻。我們可以調用IDevicePolicyManager服務中的lockNow方法來發(fā)送一個廣播實現鎖屏。
IDevicePolicyManager是被系統(tǒng)隱藏掉的,需要通過反射還獲取此服務。
步驟:
1.創(chuàng)建MyAdmin的廣播接收者繼承DeviceAdminReceiver
2.通過反射 ,獲取IDevicePolicyManager服務 ,IDevicePolicyManager通過AIDL來獲取出來。
3.注冊廣播接收者為admin設備
4.獲取服務中的方法
效果圖:
注冊MyAdmin廣播接收者:
<receiver android:name=".MyAdmin"> <meta-data android:name="android.app.device_admin" android:resource="@xml/my_admin" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
my_admin.xml:
<?xml version="1.0" encoding="utf-8"?> <device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> <watch-login /> <reset-password /> <force-lock /> <wipe-data /> </uses-policies> </device-admin>
反射獲取服務、注冊權限、實現鎖屏:
public class LockActivity extends Activity { IDevicePolicyManager mService; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } //鎖屏 public void lock(View view){ try { //通過反射獲取到sdk隱藏的服務 Method method = Class.forName("android.os.ServiceManager") .getMethod("getService", String.class); IBinder binder = (IBinder) method.invoke(null,//激活服務 new Object[] { Context.DEVICE_POLICY_SERVICE }); mService = IDevicePolicyManager.Stub.asInterface(binder); //定義組件的名字 ComponentName mAdminName = new ComponentName(this, MyAdmin.class); //注冊權限 if (mService != null) { //判斷自定義的廣播接受者 是不是被注冊成 deviceadmin的權限 if (!mService.isAdminActive(mAdminName)) { Intent intent = new Intent( DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName); startActivity(intent); } //調用服務實現鎖屏 mService.lockNow(); //設置解鎖密碼 mService.resetPassword("123", 0); } } catch (Exception e) { e.printStackTrace(); } } }
AIDL:
/* ** ** Copyright 2010, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ package android.app.admin; import android.content.ComponentName; /** * Internal IPC interface to the device policy service. * {@hide} */ interface IDevicePolicyManager { void setPasswordQuality(in ComponentName who, int quality); int getPasswordQuality(in ComponentName who); void setPasswordMinimumLength(in ComponentName who, int length); int getPasswordMinimumLength(in ComponentName who); boolean isActivePasswordSufficient(); int getCurrentFailedPasswordAttempts(); void setMaximumFailedPasswordsForWipe(in ComponentName admin, int num); int getMaximumFailedPasswordsForWipe(in ComponentName admin); boolean resetPassword(String password, int flags); void setMaximumTimeToLock(in ComponentName who, long timeMs); long getMaximumTimeToLock(in ComponentName who); void lockNow(); void wipeData(int flags); void setActiveAdmin(in ComponentName policyReceiver); boolean isAdminActive(in ComponentName policyReceiver); List<ComponentName> getActiveAdmins(); boolean packageHasActiveAdmins(String packageName); void removeActiveAdmin(in ComponentName policyReceiver); void setActivePasswordState(int quality, int length); void reportFailedPasswordAttempt(); void reportSuccessfulPasswordAttempt(); }
希望本文所述對大家Android程序設計有所幫助。
- Android 系統(tǒng)服務TelecomService啟動過程原理分析
- Android 添加系統(tǒng)服務的方法詳解
- Android中獲得正在運行的程序和系統(tǒng)服務的方法
- 往Android系統(tǒng)中添加服務的方法教程
- Android實現調用系統(tǒng)圖庫與相機設置頭像并保存在本地及服務器
- Android開發(fā)中調用系統(tǒng)相冊上傳圖片到服務器OPPO等部分手機上出現短暫的顯示桌面問題的解決方法
- Ubuntu中為Android系統(tǒng)實現內置Java應用程序測試Application Frameworks層的硬件服務
- Android系統(tǒng)服務是如何獲取的
相關文章
android中圖片的三級緩存cache策略(內存/文件/網絡)
實現圖片緩存也不難,需要有相應的cache策略。這里我采用 內存-文件-網絡 三層cache機制,其中內存緩存包括強引用緩存和軟引用緩存(SoftReference),其實網絡不算cache,這里姑且也把它劃到緩存的層次結構中2013-06-06Android RadarView雷達圖(蜘蛛網圖)的實現代碼
這篇文章主要介紹了Android RadarView雷達圖(蜘蛛網圖)的實現代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03