アプリケーションからデバイスをロック状態(スリープ)にする.
結構てこずったので手順をメモ.
手順
- android.app.admin.DeviceAdminReceiver をインポート
- DeviceAdminReceiver を継承したクラスを作成
- デバイス管理者権限の付与
- Manifest ファイルの定義
- デバイス管理ポリシー定義ファイルの追加
1.android.app.admin.DeviceAdminReceiver をインポート
DeviceAdminReceiver.lockNow() を実行したいActivity内に定義すればEclipseの補完機能でPackageのインポートまでやってくれる.
2.DeviceAdminReceiver を継承したクラスを作成
onEnabled と onDisabled をOverrideする. 特に処理がなければ中身は空でも良い.(なぜこれが必要なのかは不明)
public class MyDeviceReceiver extends DeviceAdminReceiver { @Override public void onEnabled(Context context, Intent intent) { } @Override public void onDisabled(Context context, Intent intent) { } }
3.デバイス管理者権限の付与
Activityを継承したクラス(画面ロックを実行したいアクティビティ)のメンバ変数に以下を定義
static final int RESULT_ENABLE = 1; ComponentName mCN; DevicePolicyManager mDPM;onCreate 内でデバイス管理者の登録を行う.
mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); mCN = new ComponentName(this, MyDeviceReceiver.class); if (!mDPM.isAdminActive(mCN)) { // デバイス管理者の登録 Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mCN); startActivityForResult(intent, RESULT_ENABLE); } else { // 権限が取れていればロック実行 devicePolicyManager_.lockNow(); }デバイス管理者登録したActivityの戻りを受け取る.
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case RESULT_ENABLE: if (resultCode == Activity.RESULT_OK) { // Has become the device administrator. Log.i("tag", "Administration enabled!"); } else { //Canceled or failed. Log.i("tag", "Administration enable FAILED!"); } return; } super.onActivityResult(requestCode, resultCode, data); }
4.Manifest ファイルの定義
Manifestにレシーバを定義する.
<receiver android:name=".MyDeviceReceiver" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/lock_policy" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
5.デバイス管理ポリシー定義ファイルの追加
res/xml 以下にxmlファイルを作成する.
<?xml version="1.0" encoding="utf-8"?> <device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <force-lock/> </uses-policies> </device-admin>
注意事項
- デバイス管理者の権限がないとDeviceAdminReceiver.lockNow() メソッドが実行できない
- デバイス管理者の付与はAndroid2.2からサポートされる
参考にしたサイト
DeviceAdminSample.java | Android Developers
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html
androidで画面をロックする方法がよく分からない。 - よせばいいのに
http://d.hatena.ne.jp/compound/20110813/1313245962
java - Android DevicePolicyManager lockNow() problem - Stack Overflow
http://stackoverflow.com/questions/6560426/android-devicepolicymanager-locknow-problem
[Android] Make your application a device administrator « Rootfs's Blog
http://rootfs.wordpress.com/2010/09/09/android-make-your-application-a-device-administrator/
※手順が丁寧に解説されていて役に立つ
0 件のコメント:
コメントを投稿