2016-08-26 157 views
3

我試圖把我的應用我的平板電腦的device_owner(沒有ROOT或NFC),使用以下命令:如何將device_owner設置爲我的android應用程序?

adb shell dpm set-device-owner com.test.my_device_owner_app/.MyDeviceAdminReceiver 

喜歡寫在許多網站(因爲我必須做出KIOSK APP)。首先,我犯了一個工廠重置的,然後我安裝我的應用程序,然後我寫了這個外殼命令,但得到的答覆是:

java.lang.IllegalStateException:試圖設置設備所有者,但設備 是已經配置。
   在android.os.Parcel.readException(Parcel.java:1554)
   在android.os.Parcel.readException(Parcel.java:1499)
   在android.app.admin.IDevicePolicyManager $存根$ Proxy.setDeviceOwner(IDevicePolicyManager.java:3212)
   在com.android.commands.dpm.Dpm.runSetDeviceOwner(Dpm.java:114)
   在com.android.commands.dpm.Dpm .onRun(Dpm.java:82)
   在com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
   在com.android.commands.dpm.Dpm.main(Dpm.java:38)
   在玉米.android.internal.os.RuntimeInit.nativeFinishInit(本機方法)
   在com.android.internal.os.RuntimeInit.main(RuntimeInit.java:249)

現在,我怎麼能解決這個問題沒有生根片劑?

+0

你弄清楚如何解決這個問題嗎?我有聯想a10-30。看起來好像有一個lenovo在安裝過程中創建的隱藏帳戶,所以它表示該設備已經配置。 – kash

+0

nope ....此刻,我仍然無法在此平板電腦上設置device_owner。 – mf87

回答

0

我有與聯想瑜伽2平板電腦相同的問題。

下面是我在研究這個問題時發現的dpm源代碼的一些細節。

if (!allowedToSetDeviceOwnerOnDevice()) { 
     throw new IllegalStateException(
       "Trying to set device owner but device is already provisioned."); 
    } 

    if (mDeviceOwner != null && mDeviceOwner.hasDeviceOwner()) { 
     throw new IllegalStateException(
       "Trying to set device owner but device owner is already set."); 
    } 

這裏是allowedToSetDeviceOwnerOnDevice實施

/** 
* Device owner can only be set on an unprovisioned device, unless it was initiated by "adb", in 
* which case we allow it if no account is associated with the device. 
*/ 
private boolean allowedToSetDeviceOwnerOnDevice() { 
    int callingId = Binder.getCallingUid(); 
    if (callingId == Process.SHELL_UID || callingId == Process.ROOT_UID) { 
     return AccountManager.get(mContext).getAccounts().length == 0; 
    } else { 
     return Settings.Global.getInt(mContext.getContentResolver(), 
       Settings.Global.DEVICE_PROVISIONED, 0) == 0; 
    } 
} 

所以首先要確保所有帳戶將被刪除。檢查設置>帳戶。 Lenovos脹大的軟件默認創建了本地日曆帳戶。你必須刪除它。

對於那些誰擁有root訪問權限

SO answer for manually creating the device_owner.xml。從實現中我可以看出,dpm與答案中所描述的相同。順便說一下,我保留了名稱屬性,沒有任何問題。

當你在else情況看,你可以通過調用

settings put global device_provisioned 0 

我與瑜伽體驗平板電腦繞過測試

即使我有root權限,在做恢復出廠設置,並嘗試device_owner .xml方法我昨天沒有成功。

我今天做什麼用谷歌帳戶(昨天我已經跳過這一部分)登錄和刪除也該帳戶設置後>帳戶我能夠(如)運行dpm命令成功。

更新

我有另一種瑜伽2平板電腦沒有root訪問,而沒有與我的谷歌賬戶登錄,並已成功設置設備所有者。

我想我可以推薦你:嘗試在安裝你的kiosk模式應用後關閉Android Studio。也許這會導致另一個Binder.getCallingUid()

相關問題