国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程獲取系統隱藏服務實現鎖屏的方法

2020-04-11 11:05:30
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程獲取系統隱藏服務實現鎖屏的方法。分享給大家供大家參考,具體如下:

實現原理:當按鎖屏鍵時,會發出一個廣播,當界面接收到一個廣播就可以實現鎖頻。我們可以調用IDevicePolicyManager服務中的lockNow方法來發送一個廣播實現鎖屏。

IDevicePolicyManager是被系統隱藏掉的,需要通過反射還獲取此服務。

步驟:

1.創建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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淳安县| 定州市| 石门县| 茶陵县| 工布江达县| 密山市| 天津市| 嘉禾县| 惠水县| 巩义市| 册亨县| 陵水| 大悟县| 黔西县| 靖西县| 忻州市| 昌黎县| 航空| 榆社县| 顺义区| 昌宁县| 遂平县| 嘉定区| 大同县| 施甸县| 承德县| 梁平县| 舟曲县| 常山县| 长寿区| 通渭县| 屏边| 澄城县| 隆昌县| 南漳县| 牡丹江市| 汝州市| 灵宝市| 冕宁县| 高平市| 方山县|