如何在没有 NFC 和 ADB shell 命令的情况下让我的应用程序成为设备所有者?

How to make my app device owner without NFC and ADB shell command?

我有一个 android 应用程序安装在 100 多台设备上。 (Android 5.1.1 API22 和 6.0.1 API 23)

https://developer.android.com/reference/android/app/admin/package-summary.html

我浏览了所有这些参考资料,但运气不好。

使用 devicePolicyManager,我收到错误:XXXXX App 不是设备所有者。

我知道有一种方法可以通过 shell 命令 (ADB) 获取设备所有者,但我无法通过 USB 在所有设备上单独执行此操作。

DevicePolicyManager deviceManger = (DevicePolicyManager)Forms.Context.GetSystemService(Context.DevicePolicyService); ComponentName demoDeviceAdmin = new ComponentName(Forms.Context, Java.Lang.Class.FromType(typeof(DeviceAdmin))); deviceManger.SetGlobalSetting(demoDeviceAdmin, "wifi_device_owner_configs_lockdown", "1");

您可以通过几种不同的方式获取 Android 设备的设备所有者。根据设备是您所有还是 BYOD,您可以使用不同的方法。 Google table 总结了您取得设备所有权的所有可能方式。你可以找到它 here.

源代码说,'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'

如果您没有设置任何帐户,您可以使用 dpm 以编程方式进行设置:

try {
    Runtime.getRuntime().exec("dpm set-device-owner com.example.deviceowner/.MyDeviceAdminReceiver");
} catch (Exception e) {
    Log.e(TAG, "device owner not set");
    Log.e(TAG, e.toString());
    e.printStackTrace();
}

参考: http://florent-dupont.blogspot.fr/2015/01/android-shell-command-dpm-device-policy.html

我已经创建了一个方法 MakeOwner() 并调用了 onCreate 方法,幸运的是它运行良好...

 public void MakeOwner(){
      try {
            Runtime.getRuntime().exec("dpm set-device-owner com.exampledemo.parsaniahardik.scanbarcodeqrdemonuts/.BasicDeviceAdminReceiver");
        } catch (Exception e) {
            Log.e(TAG, "device owner not set");
            Log.e(TAG, e.toString());
            e.printStackTrace();
        }
    }