2017-12-08 5 views
0

Runtime.getRuntime()。exec( "dpm set-device-owner com.integral.kiosk.kioskapp/.receivers.MyDeviceAdminReceiver");コードを使用してデバイス所有者の設定が機能しない

AndroidエミュレータのNexus 6 OS Android 8にデバイス所有者を設定していませんが、ですが、adbシェルコマンドを使用している場合はうまくいきます。

私はoncreate関数で使用した以下のコードを添付します。

ComponentName deviceAdmin = new ComponentName(this, MyDeviceAdminReceiver.class); 
     if (!mDevicePolicyManager.isAdminActive(deviceAdmin)) { 
      Toast.makeText(this, "Not Device Admin", Toast.LENGTH_SHORT).show(); 

      Intent activateDeviceAdmin = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
      activateDeviceAdmin.putExtra(
        DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdmin 
      ); 
      activateDeviceAdmin 
        .putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "After activating admin, you will be able to block application uninstallation.”"); 
      startActivityForResult(activateDeviceAdmin, 
        PM_ACTIVATION_REQUEST_CODE); 
     } 


     if (mDevicePolicyManager.isDeviceOwnerApp(getPackageName())) { 
      mDevicePolicyManager.setLockTaskPackages(deviceAdmin, new String[]{getPackageName()}); 
      Toast.makeText(this, "Device Owner", Toast.LENGTH_SHORT).show(); 
//   startLockTask(); 
      mDevicePolicyManager.clearDeviceOwnerApp(getPackageName()); 
     } else { 

      Toast.makeText(this, "Not Device Owner", Toast.LENGTH_SHORT).show(); 
      try { 
       Runtime.getRuntime().exec("dpm set-device-owner com.integral.kiosk.kioskapp/.receivers.MyDeviceAdminReceiver"); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

助けてください。 ありがとうございます。

答えて

0

最初のif文ブロック内のすべての「デバイス管理者の追加」コードをすべて削除してみてください。 Lollipop以降の各Androidのリリースでは、ますます多くのデバイス管理者APIが廃止されています。あなたのアプリは、デバイスの所有者である必要があります。いったんデバイスの所有者であれば、アンインストールすることはできず、ロックされたタスクを自分自身などから設定することができます。

関連する問題