2017-07-14 77 views
1

我創建了一個自助服務終端應用程序,而且我試圖將設備設置爲管理員。每當我檢查,如果我主動管理它檢查,如果設備是admin,我收到了一條錯誤之前返回回假設備管理不起作用

private void provisionOwner() { 
    DevicePolicyManager manager = 
      (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 
    ComponentName componentName = BasicDeviceAdminReceiver.getComponentName(this); 

    if(!manager.isAdminActive(componentName)) { 
     Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
     intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); 
     startActivityForResult(intent, 0); 
     return; 
    } 

    if (manager.isDeviceOwnerApp(getPackageName())) 
     manager.setLockTaskPackages(componentName, new String [] {getPackageName()}); 
} 

我也跟着做的命令行腳本的指令。

adb shell dpm set-device-owner com.testapp/.DeviceAdminReceiver 

我回來的錯誤是

enter image description here

對於AndroidManifest.xml中我添加權限藍牙

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 

對於AndroidManifest.xml中我註冊DeviceAdminReceiver

<receiver 
     android:name="<my package>.DeviceAdminReceiver" 
     android:label="@string/app_name" 
     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> 

我device_admin.xml如下:

<?xml version="1.0" encoding="utf-8"?> 
<device-admin> 
    <uses-policies> 
     <wipe-data/> 
     <force-lock/> 
     <disable-camera/> 
     <disable-keyguard-features/> 
    </uses-policies> 
</device-admin> 

是否有必要,設立Kiosk模式,我做我的設備管理?如果是這樣,爲什麼我收到這個錯誤?

回答

1

作爲設備所有者和設備管理員是有區別的。您正在設置一個(設備管理員)並檢查另一個(設備所有者)。

設備所有者通常在Google嚮導開頭的設備配置過程中設置。但也可以在使用您提到的dpm命令通過Google嚮導後設置。如果設備上沒有帳戶,則dpm命令只能設置設備所有者。設備擁有者由於其擁有的控制權而可以設置,因此受到限制。通常,企業擁有的設備將作爲設備所有者配備MDM/EMM。

設備管理員在設備控制方面受限得多。但它可以在任何時候添加。自從Android Enterprise(Android for Work [AfW])在Lollipop中發佈以來,每個Android版本都越來越限制設備管理員可以做什麼。

最完整的自助服務終端解決方案將設置設備作爲設備所有者的應用程序。我見過的其他解決方案是使用自定義啓動器通過將應用程序列入白名單來鎖定設備,但這種實現存在很多安全漏洞。

調查TestDPC應用程序。 Google爲它提供源代碼,如果不是你所需要的,那麼它將擁有大部分的功能。充分利用它作爲設備所有者的控制權。

https://developers.google.com/android/work/build-dpc

https://github.com/googlesamples/android-testdpc

我的猜測是,您的應用程序沒有正確設置爲設備所有者,也不設備管理。特別看看你有一個DeviceAdminReceiver在清單中用android:permission="android.permission.BIND_DEVICE_ADMIN"聲明,還有一個包含它可能使用的策略的xml資源文件。更多的源代碼將有助於調試您所看到的問題。

+0

感謝您的回答。這更清楚。我還將你提到的更新添加到我的問題中 – portfoliobuilder