sdabet
sdabet

Reputation: 18670

How to set device owner on Android Things?

I would like to set my Android app as device owner on a device running Android Things.

(I know that Android Things is getting shut down, but still I would need to make it work)

I tried the usual command: adb shell dpm set-device-owner <package>/<component>

This command works well on a standard Android device, but on Android Things I get the following response:

java.lang.RuntimeException: Can't set package ComponentInfo{<package>/<component>} as device owner.
at com.android.commands.dpm.Dpm.runSetDeviceOwner(Dpm.java:149)
at com.android.commands.dpm.Dpm.onRun(Dpm.java:96)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:54)
at com.android.commands.dpm.Dpm.main(Dpm.java:41)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:285)

I tried running the command as root (after adb shell & su), but still get the same error.

I also tried to create manually device_owner.xml, device_policies.xml,... files in /system/data, as mentionned in topics related to AOSP, but it has no effect.

Is it somehow possible to set device owner on an Android Things device?

Upvotes: 4

Views: 990

Answers (1)

Subhanshuja
Subhanshuja

Reputation: 418

Android Things are already deprecated now, you can use smartphone OS or Android. That is based on this quote:

Android Things is a now-deprecated Android-based embedded operating system platform by Google, announced at Google I/O 2015, and launched in 2018. In 2019, Android Things dropped support for low-power hardware and refocused on smartphone-class devices.

Owner in android can be used to set in this document explanation, sample code :

val provisioningActivity = getActivity()

// You'll need the package name for the DPC app.
val myDPCPackageName = "com.example.myDPCApp"

// Set up the provisioning intent
val provisioningIntent = Intent("android.app.action.PROVISION_MANAGED_PROFILE")
provisioningIntent.putExtra(myDPCPackageName,
        provisioningActivity.applicationContext.packageName)
if (provisioningIntent.resolveActivity(provisioningActivity.packageManager) == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE)
    provisioningActivity.finish()
}

Upvotes: 0

Related Questions