Android實(shí)戰(zhàn)教程第五篇之一鍵鎖屏應(yīng)用
Device Administration
對(duì)于這個(gè)應(yīng)用,市場(chǎng)上很多,但是看一下評(píng)論就知道效果有多差了,因?yàn)?9%一鍵鎖屏應(yīng)用沒(méi)辦法卸載。今天就開(kāi)發(fā)一個(gè)小應(yīng)用,實(shí)現(xiàn)輕松點(diǎn)擊一鍵鎖屏,同時(shí)支持卸載。。。
通查看谷歌原文檔,有設(shè)備管理器的API,從這里可以抽取一些代碼,開(kāi)發(fā)出一個(gè)小應(yīng)用,即即將介紹的《一鍵鎖屏》。
根據(jù)文檔翻譯,獲取設(shè)備管理器的大致步驟如下:
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、配置字符串相關(guān)信息
<string name="activity_sample_device_admin">設(shè)備管理員</string> <string name="sample_device_admin">管理員</string> <string name="sample_device_admin_description">開(kāi)啟設(shè)備管理員,不開(kāi)啟扣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)建設(shè)備管理器和組件
dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); ComponentName who = new ComponentName(this, DeviceAdminSample.class);
6、功能
dpm.lockNow();一鍵鎖屏
上述步驟有些晦澀,看一下實(shí)際操作步驟(建議通過(guò)閱讀官網(wǎng)AP文檔I一步步操作):
1)、把下方官方文檔給出的配置文件的代碼復(fù)制到自己創(chuàng)建的工程里面:
復(fù)制過(guò)去發(fā)現(xiàn)報(bào)錯(cuò)了,因?yàn)槿龡l描述屬性信息沒(méi)有配置,那么去String.xml中配置以下三條信息:
<string name="activity_sample_device_admin">設(shè)備管理員</string> <string name="sample_device_admin">管理員</string> <string name="sample_device_admin_description">開(kāi)啟設(shè)備管理員,不開(kāi)啟扣2000塊</string>
刪除掉配置文件中系統(tǒng)自帶的activity節(jié)點(diǎn)信息。修改復(fù)制過(guò)來(lái)的activity標(biāo)簽name為我們工程的活動(dòng)名稱。
此時(shí)還是報(bào)錯(cuò),因?yàn)檫€有一個(gè)android:resource="@xml/device_admin_sample" 沒(méi)有配置
新建xml的文件夾,建一個(gè)device_admin_sample的文件,里面需要配置一些內(nèi)容。把官方文檔中的內(nèi)容全部寫(xiě)入即可。
內(nèi)容如下:
解決了報(bào)錯(cuò)問(wèn)題。
2)、按照文檔要求,新建一個(gè)class DeviceAdminSample extends DeviceAdminReceiver。這是一個(gè)廣播接收者,里面不需要寫(xiě)任何內(nèi)容,記得把配置文件中活動(dòng)和接收者名稱修改為我們自己的。
android:name="com.itydl.lockscreen.DeviceAdminSample"
android:name="com.itydl.lockscreen.MainActivity"
3)、在活動(dòng)中點(diǎn)擊事件里面添加如下兩行代碼:
DevicePolicyManager dmp = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); dmp.lockNow();//一鍵鎖屏
此時(shí)其實(shí)已經(jīng)開(kāi)發(fā)完畢了,運(yùn)行后會(huì)報(bào)錯(cuò),發(fā)現(xiàn)時(shí)沒(méi)有“”擁有者“權(quán)限類似的錯(cuò)誤信息。因?yàn)檫@僅僅對(duì)于程序員有效,進(jìn)入設(shè)備管理器激活這個(gè)應(yīng)用,再打開(kāi)就可以使用了;對(duì)于用戶,不知道在哪激活,根本得不得體驗(yàn),所以還需要設(shè)置一鍵鎖屏的時(shí)候,啟動(dòng)程序,先進(jìn)入開(kāi)啟設(shè)備管理器活動(dòng)的邏輯,讓用戶手動(dòng)激活。
具體的代碼如下:
清單文件:
<?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); //獲取設(shè)備管理員對(duì)象 dmp = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); } /** * 一鍵鎖屏 * * @param v */ public void lockScreen(View v) { // 如果沒(méi)有激活設(shè)備管理員,提醒用戶做事 ComponentName who = new ComponentName(this, DeviceAdminSample.class); if (dmp.isAdminActive(who)) {// true表示已經(jīng)激活,測(cè)試管理員是否已經(jīng)激活。這里的who其實(shí)就是我們自定義的空的廣播接收者 dmp.lockNow();// 一鍵鎖屏 } else { ////幫助用戶打開(kāi)激活設(shè)備管理器的界面,讓用戶手動(dòng)激活 /**根據(jù)官方文檔,寫(xiě)出啟動(dòng)設(shè)備管理器的活動(dòng) * // 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, "設(shè)備管理器。。。"); startActivityForResult(intent, 1); } } }
此時(shí)記得去設(shè)備管理器取消激活。
一鍵運(yùn)行之后如下:
點(diǎn)擊一鍵鎖屏后,自動(dòng)跳轉(zhuǎn)到設(shè)備管理器頁(yè)面,按下Activiate。應(yīng)用就生效了。
這個(gè)時(shí)候應(yīng)用算是開(kāi)發(fā)完畢了,的確能實(shí)現(xiàn)鎖屏功能,但是還有很多問(wèn)題需要解決。
你會(huì)發(fā)現(xiàn)此時(shí)的而應(yīng)用和市場(chǎng)上評(píng)論一樣,沒(méi)法卸載?。?!
這樣用戶體驗(yàn)也很差,而且必須點(diǎn)開(kāi)用用才能鎖屏,那就沒(méi)必要浪費(fèi)時(shí)間點(diǎn)開(kāi)一個(gè)應(yīng)用去鎖屏了。
對(duì)于上面幾個(gè)問(wèn)題,在后邊的博文中繼續(xù)更新解決,點(diǎn)擊查看:http://www.dbjr.com.cn/article/96996.htm。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android listview動(dòng)態(tài)加載列表項(xiàng)實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Android listview動(dòng)態(tài)加載列表項(xiàng)實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06sqlite查詢結(jié)果在listview中展示的實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇sqlite查詢結(jié)果在listview中展示的實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04android中px、sp與dp之間進(jìn)行轉(zhuǎn)換詳解
android中在xml布局中我們可以使用dp和px都可以,但是在代碼中,很多方法只提供了設(shè)置px的方法,這時(shí)候就需要用到dp和px相互切換了,下面這篇文章主要給大家介紹了關(guān)于android中px、sp與dp之間進(jìn)行轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2022-08-08Android獲取分享應(yīng)用列表詳解及實(shí)例
這篇文章主要介紹了Android獲取分享應(yīng)用列表詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04Android控件系列之RadioButton與RadioGroup使用方法
本文介紹了Android中如何使用RadioGroup和RadioButton,對(duì)比了RadioButton和CheckBox的區(qū)別,并實(shí)現(xiàn)了自定義的RadioGroup中被選中RadioButton的變更監(jiān)聽(tīng)事件2012-11-11Android 架構(gòu)之?dāng)?shù)據(jù)庫(kù)框架升級(jí)
上一篇講解了# Android 架構(gòu)之?dāng)?shù)據(jù)框架搭建 ,里面含有數(shù)據(jù)庫(kù)最基礎(chǔ)的增刪改查功能,不過(guò)只考慮了單數(shù)據(jù)庫(kù),開(kāi)發(fā)者可以舉一反三按照對(duì)應(yīng)思路設(shè)計(jì)多數(shù)據(jù)庫(kù)架構(gòu)。 在本篇里,將會(huì)講解令開(kāi)發(fā)者比較頭疼的數(shù)據(jù)庫(kù)升級(jí),需要的朋友可以參考下面文章內(nèi)容2021-09-09activity 獲取rootView 設(shè)置backGroundColor的方法
下面小編就為大家?guī)?lái)一篇activity 獲取rootView 設(shè)置backGroundColor的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04Android實(shí)現(xiàn)簡(jiǎn)單的答題系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單的答題系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01