Ich möchte startLockTask() ohne irgendeine Anfrage für Benutzer aktivieren. Also zuerst lese ich diese Device Administration und erstellen Sie kleine Beispielanwendung. Im Ergebnis habe ich meine Anwendung in der Liste der Geräteadministratoren, aber wenn ich startLockTask() anrufe, wird sie immer noch nicht im unbeaufsichtigten Modus ausgeführt. Wenn ich versuche, es so zu nennen:startLockTask() ohne Anfrage Benutzeraktion
DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
String[] packages = {this.getPackageName()};
myDevicePolicyManager.setLockTaskPackages(deviceAdminComponentName, packages);
startLockTask();
i nächste Ausnahme bin immer: java.lang.SecurityException: Admin ComponentInfo{com.hssoft.deviceadmintest/com.hssoft.deviceadmintest.DeviceAdmin} does not own the device
So habe ich Geräteadministrator, aber ich bin nicht Gerätebesitzer. Was ich falsch mache, kann jemand helfen? Hier ist meine volle App-Code:
Manifest-Datei:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hssoft.deviceadmintest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="com.hssoft.deviceadmintest.DeviceAdmin"
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.PROFILE_PROVISIONING_COMPLETE"/>
</intent-filter>
</receiver>
</application>
</manifest>
xml/device_admin.xml:
<?xml version="1.0" encoding="utf-8"?>
<device-admin>
<uses-policies>
<limit-password/>
<watch-login/>
<reset-password/>
<force-lock/>
<wipe-data/>
<expire-password/>
<encrypted-storage/>
<disable-camera/>
</uses-policies>
</device-admin>
DeviceAdmin.java:
package com.hssoft.deviceadmintest;
import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class DeviceAdmin extends DeviceAdminReceiver {
@Override
public void onEnabled(Context context, Intent intent) {
super.onEnabled(context, intent);
Log.i("Device Admin: ", "Enabled");
}
@Override
public String onDisableRequested(Context context, Intent intent) {
return "Admin disable requested";
}
@Override
public void onDisabled(Context context, Intent intent) {
super.onDisabled(context, intent);
Log.i("Device Admin: ", "Disabled");
}
@Override
public void onPasswordChanged(Context context, Intent intent) {
super.onPasswordChanged(context, intent);
Log.i("Device Admin: ", "Password changed");
}
}
MainActivity.java:
package com.hssoft.deviceadmintest;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
static final int ACTIVATION_REQUEST = 1;
ComponentName deviceAdminComponentName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
deviceAdminComponentName = new ComponentName(this, DeviceAdmin.class);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminComponentName);
startActivityForResult(intent, ACTIVATION_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case ACTIVATION_REQUEST:
if (resultCode == Activity.RESULT_OK) {
Log.i("MainActivity", "Administration enabled!");
DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
String mPackageName = this.getPackageName();
if (myDevicePolicyManager.isDeviceOwnerApp(mPackageName)) {
myDevicePolicyManager.setLockTaskPackages(deviceAdminComponentName, new String[]{mPackageName});
}
if (myDevicePolicyManager.isLockTaskPermitted(mPackageName)) {
startLockTask();
}
} else {
Log.i("MainActivity", "Administration enable FAILED!");
}
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
Kann jemand mit dieser Frage helfen? –