標籤:
轉載請註明出處:http://blog.csdn.net/qq_32059827/article/details/51860900 點擊開啟連結Device Administration對於這個應用,市場上很多,但是看一下評論就知道效果有多差了,因為99%一鍵鎖定畫面 app沒辦法卸載。今天就開發一個小應用,實現輕鬆點擊一鍵鎖屏,同時支援卸載。。。
通查看Google原文檔,有裝置管理員的API,從這裡可以抽取一些代碼,開發出一個小應用,即即將介紹的《一鍵鎖屏》。
根據文檔翻譯,擷取裝置管理員的大致步驟如下:
1,建立類DeviceAdminReceiver的子類
如:com.itydl.lockscreen.DeviceAdminSample
2,在資訊清單檔中配置廣播接收者
<receiver android:name="com.itydl.lockscreen.DeviceAdminSample" android:description="@string/sample_device_admin_description" android:label="@string/sample_device_admin" android:permission="android.permission.BIND_DEVICE_ADMIN" > <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_sample" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
3,配置字串相關資訊
<string name="activity_sample_device_admin">裝置管理員</string><string name="sample_device_admin">管理員</string><string name="sample_device_admin_description">開啟裝置管理員,不開啟扣2000塊</string>
4,在res目錄下建立xml檔案夾,在該檔案夾下建立deviceadminsample.xml檔案,內容:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> <watch-login /> <reset-password /> <force-lock /> <wipe-data /> <expire-password /> <encrypted-storage /> <disable-camera /> </uses-policies></device-admin>
5,在代碼中建立裝置管理員和組件
dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); ComponentName who = new ComponentName(this, DeviceAdminSample.class);
6,寫功能
dpm.lockNow();一鍵鎖屏
上述步驟有些晦澀,看一下實際操作步驟(建議通過閱讀官網AP文檔I一步步操作):
1、把下方官方文檔給出的設定檔的代碼複製到自己建立的工程裡面:
複製過去發現報錯了,因為三條描述屬性資訊沒有配置,那麼去String.xml中配置以下三條資訊:
<string name="activity_sample_device_admin">裝置管理員</string><string name="sample_device_admin">管理員</string><string name="sample_device_admin_description">開啟裝置管理員,不開啟扣2000塊</string>
刪除掉設定檔中系統內建的activity節點資訊。修改複製過來的activity標籤name為我們工程的活動名稱。
此時還是報錯,因為還有一個android:resource="@xml/device_admin_sample" 沒有配置建立xml的檔案夾,建一個device_admin_sample的檔案,裡面需要配置一些內容。把官方文檔中的內容全部寫入即可。內容如下:
解決了報錯問題。
2、按照文檔要求,建立一個class DeviceAdminSample extends DeviceAdminReceiver。這是一個服務,裡面不需要寫任何內容
記得把設定檔中活動和服務名稱修改為我們自己的。 android:name="com.itydl.lockscreen.DeviceAdminSample"
android:name="com.itydl.lockscreen.MainActivity"
3、在活動中添加如下兩行代碼:
DevicePolicyManager dmp = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
dmp.lockNow();//一鍵鎖屏此時其實已經開發完畢了,但是這僅僅對於程式員有效,進入裝置管理員啟用這個應用;對於使用者不知道在哪啟用,根本得不得體驗,所以還需要設定一鍵鎖屏的時候,加入開啟裝置管理員活動的而邏輯。具體的代碼如下:資訊清單檔:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itydl.lockscreen" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.itydl.lockscreen.MainActivity" android:label="一鍵鎖屏" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.itydl.lockscreen.DeviceAdminSample" android:description="@string/sample_device_admin_description" android:label="@string/sample_device_admin" android:permission="android.permission.BIND_DEVICE_ADMIN" > <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_sample" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver> </application></manifest>
package com.itydl.lockscreen;import android.os.Bundle;import android.app.Activity;import android.app.admin.DevicePolicyManager;import android.content.ComponentName;import android.content.Intent;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {private DevicePolicyManager dmp;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dmp = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);}/** * 一鍵鎖屏 * * @param v */public void lockScreen(View v) {// 如果沒有啟用裝置管理員,提醒使用者做事ComponentName who = new ComponentName(this, DeviceAdminSample.class);if (dmp.isAdminActive(who)) {// true表示已經啟用dmp.lockNow();// 一鍵鎖屏} else {/**根據官方文檔,寫出啟動裝置管理員的活動 * // Launch the activity to have the user enable our admin. Intent * intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); * intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, * mDeviceAdminSample); * intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, * mActivity.getString(R.string.add_admin_extra_app_text)); * startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN); */Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, who);intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "裝置管理員。。。");startActivityForResult(intent, 1);}}}
此時記得去裝置管理員取消啟用。一鍵運行之後如下:
點擊一鍵鎖屏後,自動跳轉到裝置管理員頁面,按下Activiate。應用就生效了。
這個時候應用算是開發完畢了,的確能實現鎖屏功能,但是還有很多問題需要解決。你會發現此時的而應用和市場上評論一樣,沒法卸載!!!這樣使用者體驗也很差,而且必須點開用用才能鎖屏,那就沒必要浪費時間點開一個應用去鎖屏了。對於上面幾個問題,在後邊的博文中繼續更新解決。
Android簡易實戰教程--第五話《開發一鍵鎖定畫面 app》