2011年10月15日土曜日

画面ロックアプリの作成(やっと本題)

AndroidManifest.xml
デバイス管理APIをつかうためにreceiverを定義する。
receiver   : LockReceiver(DeviceAdminReceiverを継承したクラス)
permissionに "android.permission.BIND_DEVICE_ADMIN" 
intent-filter : "android.app.action.DEVICE_ADMIN_ENABLED"
この指定をするとインストール時にユーザ確認をしてくれる。
receiverはXMLファイルで定義するのだが、ファイル名は
resourceで指定した "@xml/device_admin" となる。
-------------------------------------------------------------------------------------------

<receiver android:permission="android.permission.BIND_DEVICE_ADMIN"          
     android:name=".LockReceiver">
        <meta-data android:name="android.app.device_admin"                       android:resource="@xml/device_admin" />
        <intent-filter>
       <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"></action> 
        </
intent-filter>
</receiver>
-------------------------------------------------------------------------------------------

device_admin.xml
アプリインストール時にforce-lockのユーザ確認が行われる。
-------------------------------------------------------------------------------------------
<?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>
-------------------------------------------------------------------------------------------

LockReceiver.java
DeviceAdminReceiverを継承したクラス。
実装は何もしない。

LockNowActivity.java
-------------------------------------------------------------------------------------------
public class LockNowActivity extends Activity {

// デバイスで強制されたポリシーを管理するためのクラス(の変数)
DevicePolicyManager m_devicePolicyManager;
// LockReceiverクラス生成用
ComponentName m_lockReceiver;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // ハンドラ取得
        m_devicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);


        // LockReceiverが有効かをチェック
        m_lockReceiver = new ComponentName(this, LockReceiver.class);
        boolean active = m_devicePolicyManager.isAdminActive(m_lockReceiver);
        if (active) {
   // 有効なので画面ロック
         m_devicePolicyManager.lockNow();
        } else {
   // 有効化する
            Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, m_lockReceiver);
            intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Due to lock screen.");
            startActivity(intent);
        }
         finish();
   }
}

-------------------------------------------------------------------------------------------



0 件のコメント:

コメントを投稿