2011年11月19日土曜日

カメラを使用不可にする方法

Android 4.0から、DevicePolicyManagerにカメラを使用できなくする機能が搭載された。SDKのサンプルに使用例がある。
android-sdk¥samples¥android-14¥ApiDemos¥src¥com¥example¥android¥apis¥app¥DeviceAdminSample.java

必要な部分を抜き出すと以下のようだ。
static final private int REQUESTCODE = 1; 
DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager)getSystemService(DEVICE_POLICY_SERVICE);
ComponentName mComponentName = new ComponentName(this, DeviceAdminReceiver.class);
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Explanation");
startActivityForResult(intent, REQUESTCODE);
これを呼び出すことで、ユーザに承認を得るための画面を表示されるようだ。
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case REQUESTCODE:
                if (resultCode == Activity.RESULT_OK) {
                    Toast.makeText(this, "Admin is enabled.", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "Admin is not enabled.", Toast.LENGTH_SHORT).show();
                    this.finish();
                }
                return;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
ユーザの承認を受けたかどうかを判定するにはこの処理が必要だ。

mDevicePolicyManager.setCameraDisabled(mComponentName, true);
 そして、カメラを不使用にするには新しく追加された上記のAPIを呼び出す。仕様可能にするには、falseにすればいい。

mDevicePolicyManager.removeActiveAdmin(mComponentName);
そして最後に上記を呼び出す。

<?xml version="1.0" encoding="utf-8"?><device-admin xmlns:android="http://schemas.android.com/apk/res/android">    <uses-policies>        <disable-camera />    </uses-policies></device-admin>
 ポリシ設定も必要なようだ。上記のxmlファイルを作成する。上記のファイルをxml/device_admin.xmlとする。

        <receiver            android:name="android.app.admin.DeviceAdminReceiver"
            android:permission="android.permission.BIND_DEVICE_ADMIN" >            <meta-data                android:name="android.app.device_admin"
                android:resource="@xml/device_admin" />
            <intent-filter >                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />            </intent-filter>        </receiver>
 AndroidManifest.xmlに上記の追加が必要だ。特にカメラのオンオフだけだと不要だったが、DeviceAdminReceiverを継承したクラスを作ってそれを設定することもできる。
ユーザの承認画面は以下の画面。


カメラを使用不可にした場合は、カメラを起動すると以下のようにメッセージが出る。

0 件のコメント:

コメントを投稿