Android實戰(zhàn)教程第五篇之一鍵鎖屏應用
Device Administration
對于這個應用,市場上很多,但是看一下評論就知道效果有多差了,因為99%一鍵鎖屏應用沒辦法卸載。今天就開發(fā)一個小應用,實現(xiàn)輕松點擊一鍵鎖屏,同時支持卸載。。。
通查看谷歌原文檔,有設備管理器的API,從這里可以抽取一些代碼,開發(fā)出一個小應用,即即將介紹的《一鍵鎖屏》。
根據(jù)文檔翻譯,獲取設備管理器的大致步驟如下:
1、創(chuàng)建類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目錄下創(chuàng)建xml文件夾,在該文件夾下創(chuàng)建deviceadminsample.xml文件,內(nèi)容:
<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、在代碼中創(chuàng)建設備管理器和組件
dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); ComponentName who = new ComponentName(this, DeviceAdminSample.class);
6、功能
dpm.lockNow();一鍵鎖屏
上述步驟有些晦澀,看一下實際操作步驟(建議通過閱讀官網(wǎng)AP文檔I一步步操作):
1)、把下方官方文檔給出的配置文件的代碼復制到自己創(chuàng)建的工程里面:

復制過去發(fā)現(xiàn)報錯了,因為三條描述屬性信息沒有配置,那么去String.xml中配置以下三條信息:
<string name="activity_sample_device_admin">設備管理員</string> <string name="sample_device_admin">管理員</string> <string name="sample_device_admin_description">開啟設備管理員,不開啟扣2000塊</string>
刪除掉配置文件中系統(tǒng)自帶的activity節(jié)點信息。修改復制過來的activity標簽name為我們工程的活動名稱。
此時還是報錯,因為還有一個android:resource="@xml/device_admin_sample" 沒有配置
新建xml的文件夾,建一個device_admin_sample的文件,里面需要配置一些內(nèi)容。把官方文檔中的內(nèi)容全部寫入即可。
內(nèi)容如下:

解決了報錯問題。
2)、按照文檔要求,新建一個class DeviceAdminSample extends DeviceAdminReceiver。這是一個廣播接收者,里面不需要寫任何內(nèi)容,記得把配置文件中活動和接收者名稱修改為我們自己的。
android:name="com.itydl.lockscreen.DeviceAdminSample"
android:name="com.itydl.lockscreen.MainActivity"
3)、在活動中點擊事件里面添加如下兩行代碼:
DevicePolicyManager dmp = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); dmp.lockNow();//一鍵鎖屏
此時其實已經(jīng)開發(fā)完畢了,運行后會報錯,發(fā)現(xiàn)時沒有“”擁有者“權限類似的錯誤信息。因為這僅僅對于程序員有效,進入設備管理器激活這個應用,再打開就可以使用了;對于用戶,不知道在哪激活,根本得不得體驗,所以還需要設置一鍵鎖屏的時候,啟動程序,先進入開啟設備管理器活動的邏輯,讓用戶手動激活。
具體的代碼如下:
清單文件:
<?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;
@Override
protected 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表示已經(jīng)激活,測試管理員是否已經(jīng)激活。這里的who其實就是我們自定義的空的廣播接收者
dmp.lockNow();// 一鍵鎖屏
} else {
////幫助用戶打開激活設備管理器的界面,讓用戶手動激活
/**根據(jù)官方文檔,寫出啟動設備管理器的活動
* // 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);
}
}
}
此時記得去設備管理器取消激活。
一鍵運行之后如下:

點擊一鍵鎖屏后,自動跳轉(zhuǎn)到設備管理器頁面,按下Activiate。應用就生效了。
這個時候應用算是開發(fā)完畢了,的確能實現(xiàn)鎖屏功能,但是還有很多問題需要解決。
你會發(fā)現(xiàn)此時的而應用和市場上評論一樣,沒法卸載?。。?br />
這樣用戶體驗也很差,而且必須點開用用才能鎖屏,那就沒必要浪費時間點開一個應用去鎖屏了。
對于上面幾個問題,在后邊的博文中繼續(xù)更新解決,點擊查看:http://m.fzitv.net/article/96996.htm。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android利用SurfaceView實現(xiàn)簡單計時器
這篇文章主要為大家詳細介紹了Android利用SurfaceView實現(xiàn)一個簡單計時器,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01
Android ListView實現(xiàn)下拉加載功能
這篇文章主要為大家詳細介紹了Android ListView實現(xiàn)下拉加載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
android開發(fā)教程之a(chǎn)ndroid的handler使用方法
這篇文章主要介紹了android的handler使用方法,大家參考使用吧2014-01-01
Android定時器Timer的停止和重啟實現(xiàn)代碼
本篇文章主要介紹了Android實現(xiàn)定時器Timer的停止和重啟實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
Android中TextView自動適配文本大小的幾種解決方案
在布局中使用的話,注意按照你最大的設備來設置字體大小,這樣在小設備上回自動縮放,下面這篇文章主要給大家介紹了關于Android中TextView自動適配文本大小的幾種解決方案,需要的朋友可以參考下2022-06-06
Android基于ViewPager實現(xiàn)類似微信頁面切換效果
這篇文章主要介紹了Android基于ViewPager實現(xiàn)類似微信頁面切換效果,通過Fragment適配器實現(xiàn)頁面切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
Android Studio用genymotion運行后小圖標無法顯示問題
這篇文章主要介紹了Android Studio用genymotion運行后小圖標無法顯示的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04

