Android編程獲取系統(tǒng)隱藏服務(wù)實現(xiàn)鎖屏的方法
本文實例講述了Android編程獲取系統(tǒng)隱藏服務(wù)實現(xiàn)鎖屏的方法。分享給大家供大家參考,具體如下:
實現(xiàn)原理:當(dāng)按鎖屏鍵時,會發(fā)出一個廣播,當(dāng)界面接收到一個廣播就可以實現(xiàn)鎖頻。我們可以調(diào)用IDevicePolicyManager服務(wù)中的lockNow方法來發(fā)送一個廣播實現(xiàn)鎖屏。
IDevicePolicyManager是被系統(tǒng)隱藏掉的,需要通過反射還獲取此服務(wù)。
步驟:
1.創(chuàng)建MyAdmin的廣播接收者繼承DeviceAdminReceiver
2.通過反射 ,獲取IDevicePolicyManager服務(wù) ,IDevicePolicyManager通過AIDL來獲取出來。
3.注冊廣播接收者為admin設(shè)備
4.獲取服務(wù)中的方法
效果圖:

注冊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>
反射獲取服務(wù)、注冊權(quán)限、實現(xiàn)鎖屏:
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隱藏的服務(wù)
Method method = Class.forName("android.os.ServiceManager")
.getMethod("getService", String.class);
IBinder binder = (IBinder) method.invoke(null,//激活服務(wù)
new Object[] { Context.DEVICE_POLICY_SERVICE });
mService = IDevicePolicyManager.Stub.asInterface(binder);
//定義組件的名字
ComponentName mAdminName = new ComponentName(this, MyAdmin.class);
//注冊權(quán)限
if (mService != null) {
//判斷自定義的廣播接受者 是不是被注冊成 deviceadmin的權(quán)限
if (!mService.isAdminActive(mAdminName)) {
Intent intent = new Intent(
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
mAdminName);
startActivity(intent);
}
//調(diào)用服務(wù)實現(xiàn)鎖屏
mService.lockNow();
//設(shè)置解鎖密碼
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程序設(shè)計有所幫助。
- Android 系統(tǒng)服務(wù)TelecomService啟動過程原理分析
- Android 添加系統(tǒng)服務(wù)的方法詳解
- Android中獲得正在運(yùn)行的程序和系統(tǒng)服務(wù)的方法
- 往Android系統(tǒng)中添加服務(wù)的方法教程
- Android實現(xiàn)調(diào)用系統(tǒng)圖庫與相機(jī)設(shè)置頭像并保存在本地及服務(wù)器
- Android開發(fā)中調(diào)用系統(tǒng)相冊上傳圖片到服務(wù)器OPPO等部分手機(jī)上出現(xiàn)短暫的顯示桌面問題的解決方法
- Ubuntu中為Android系統(tǒng)實現(xiàn)內(nèi)置Java應(yīng)用程序測試Application Frameworks層的硬件服務(wù)
- Android系統(tǒng)服務(wù)是如何獲取的
相關(guān)文章
Android使用第三方服務(wù)器Bmob實現(xiàn)發(fā)送短信驗證碼
這篇文章主要介紹了Android使用第三方服務(wù)器Bmob實現(xiàn)發(fā)送短信驗證碼的思路詳解,需要的朋友可以參考下2016-09-09
Android實現(xiàn)粒子中心擴(kuò)散動畫效果
粒子動畫效果相比其他動畫來說是非常復(fù)雜了的,主要涉及三個方面,粒子初始化、粒子位移、粒子回收等問題,本篇將實現(xiàn)兩種動畫效果,代碼基本相同,只是旋轉(zhuǎn)速度不一樣,需要的朋友可以參考下2024-02-02
Android實現(xiàn)獲取meta-data和build.gradle的值
這篇文章主要介紹了Android實現(xiàn)獲取meta-data和build.gradle的值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android使用SQLiteDatabase增刪改查(CRUD)的操作教程
在 Android 中使用 SQLiteDatabase 進(jìn)行增刪改查操作是開發(fā)中的核心技能之一,下面我將詳細(xì)說明如何使用 SQLiteDatabase 進(jìn)行 CRUD 操作,需要的朋友可以參考下2025-04-04
Android自定義實現(xiàn)可回彈的ScollView
這篇文章主要為大家詳細(xì)介紹了Android自定義實現(xiàn)可回彈的ScollView,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
Android studio 實現(xiàn)隨機(jī)位置畫10個隨機(jī)大小的五角星的代碼
這篇文章主要介紹了Android studio 實現(xiàn)隨機(jī)位置畫10個隨機(jī)大小的五角星,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
使用ViewPager實現(xiàn)android軟件使用向?qū)Чδ軐崿F(xiàn)步驟
現(xiàn)在的大部分android軟件,都是使用說明,就是第一次使用該軟件時,會出現(xiàn)向?qū)?,可以左右滑動,然后就進(jìn)入應(yīng)用的主界面了,下面我們就實現(xiàn)這個功能2013-11-11

