1

画面に2つのボタンを設定しています。最初のボタンを押すたびに、カメラが無効になります。(管理者として)

マニフェストを設定しました。

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.firstapplication.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />

        </intent-filter>
    </activity>
    <!-- This is where we register our receiver -->
    <receiver
        android:name=".DemoDeviceAdminReceiver"
        android:permission="android.permission.BIND_DEVICE_ADMIN" >
        <intent-filter>

            <!-- This action is required -->
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
        </intent-filter>

        <!-- This is required this receiver to become device admin component. -->
        <meta-data
            android:name="android.app.device_admin"
            android:resource="@xml/device_admin_sample" />
    </receiver>


</application>

私は次のようにコードを書きました。

public class MainActivity extends Activity  {

static final int ACTIVATION_REQUEST = 47; // identifies our request id
DevicePolicyManager devicePolicyManager;
ComponentName demoDeviceAdmin;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    // Initialize Device Policy Manager service and our receiver class
    devicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
    demoDeviceAdmin = new ComponentName(this, DemoDeviceAdminReceiver.class);
}

/* begin, camera management block */
static boolean click = false ;
private OnClickListener setCamera = new OnClickListener() {
    public void onClick(View v) {
      if ( click == false ) {
          startCamera();
          click = true ;
      }
      else {
          stopCamera();
          click = false ;
      }
      activate () ; // activate device policy manager
    }
};
private void startCamera(){
        if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){ 
            camera.unlock();    
        } else {
                 ;
        }
    }

@SuppressLint("NewApi") private void stopCamera(){
    devicePolicyManager. setCameraDisabled(demoDeviceAdmin, true);
}

/* end, camera management block */
private OnClickListener closeApplication = new OnClickListener() {
    public void onClick(View v) {
     finish ();
    }
};
void initializeDPM ( ) {
    if (!devicePolicyManager.isAdminActive(demoDeviceAdmin)) {

            Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
                    demoDeviceAdmin);
            intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
            "Additional text explaining why this needs to be added.");
            startActivityForResult(intent, ACTIVATION_REQUEST);
    } else {
            devicePolicyManager.lockNow();
    }
}

public void activate ( ) {
        // Activate device administration
        Intent intent = new Intent(
        DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
        demoDeviceAdmin);
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
        "told me to do this");
        startActivityForResult(intent, ACTIVATION_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case ACTIVATION_REQUEST:
            if (resultCode == Activity.RESULT_OK) {
                // Has become the device administrator.
            } else {
                //Canceled or failed.
            }
            return;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

}

私の管理者クラス

public class DemoDeviceAdminReceiver extends DeviceAdminReceiver{
@Override
public void onEnabled(Context context, Intent intent) {
    super.onEnabled(context, intent);

}


@Override
public void onDisabled(Context context, Intent intent) {
    super.onDisabled(context, intent);
    }
}

私のdevice_admin_sampleは;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<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>


</LinearLayout> 

管理者としてカメラを閉じることができなかったのはなぜですか?

4

0 に答える 0