Android實戰教程第五篇之一鍵鎖定畫面 app_Android

來源:互聯網
上載者:User

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;   @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表示已經啟用,測試管理員是否已經啟用。這裡的who其實就是我們自訂的空的廣播接收者    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。應用就生效了。

這個時候應用算是開發完畢了,的確能實現鎖屏功能,但是還有很多問題需要解決。
你會發現此時的而應用和市場上評論一樣,沒法卸載!!!

這樣使用者體驗也很差,而且必須點開用用才能鎖屏,那就沒必要浪費時間點開一個應用去鎖屏了。

對於上面幾個問題,在後邊的博文中繼續更新解決,點擊查看:http://www.jb51.net/article/96996.htm。

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.