2016-08-26 3 views
3

は、私はコマンドを使用して、自分のアプリケーション(ROOTまたはNFCなし)私のタブレットのdevice_ownerを設定しようとしました:(私はKIOSK APPをしなければならないので)device_ownerをAndroidアプリに設定するにはどうすればよいですか?

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

は、多くのサイトに書かれているのが好きです。私は工場出荷時設定へのリセットを作っまず第一に、私は私のアプリをインストールし、その後、私は、シェルで次のコマンドを書いたが、答えは次のとおりです。

java.lang.IllegalStateException: は、デバイスの所有者が、デバイスを設定しようとすると、既にプロビジョニングされているandroid.os.Parcel.readException(Parcel.java:1499)でandroid.os.Parcel.readException(Parcel.java:1554)
   で
   
    android.app.admin.IDevicePolicyManagerでcom.android.commands.dpm.Dpmでcom.android.commands.dpm.Dpm.runSetDeviceOwner(Dpm.java:114)で$スタブ$ Proxy.setDeviceOwner(IDevicePolicyManager.java:3212)
   
    .onRun(Dpm.java:82)
com.android.internal.os.BaseCommand.runで (BaseCommand.java:47)com.android.commands.dpm.Dpm.mainで
   (Dpm.java:38)
   でCOM .android.internal.os.RuntimeInit.nativeFinishInit(ネイティブメソッド)
com.android.internal.os.RuntimeInit.mainで    (RuntimeInit.java:249)今

、どのようにして解決することができますタブレットを根絶することなくこの問題?

+0

問題を解決する方法を見つけましたか?私はlenovo a10-30を持っています。セットアップ中にlenovoが作成する隠しアカウントがあるように、端末は既にプロビジョニングされていると言います。 – kash

+0

nope ....私はまだこのタブレットでdevice_ownerを設定できません。 – mf87

答えて

0

私はLenovo Yoga 2 Tabletで同じ問題を抱えています。

ここでは、この問題の調査中に見つけた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 
を呼び出すことによって、テストをバイパスすることができたとしても、私は工場出荷時設定へのリセットを行うと、device_ownerをしようと、rootアクセス権を持っています.xmlメソッド私は昨日成功しませんでした。私が今日やった

は設定でも、Googleアカウント(私はこの部分をスキップしました昨日)にして削除した後、このアカウントにログインすることでした>私はdpmコマンドを実行する(SUなど)ができたアカウント成功しました。私はrootアクセス権がなく、自分のGoogleアカウントでログインせずに別のヨガ2錠を持っているし、成功したデバイスの所有者を設定している

を更新。

私はあなたをお勧めします:キオスクモードアプリをインストールした後にAndroid Studioを終了してみてください。たぶんこれは別のBinder.getCallingUid()を引き起こします。

関連する問題