2016-07-15 4 views
1

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); 
    } 
} 
+0

Kann jemand mit dieser Frage helfen? –

Antwort

1

Ihre Anwendung hat ein Gerät Eigentümer sein verhalten, wie Sie wollen, wenn Sie Root-Zugriff haben Sie können diesen Befehl ausführen zu erreichen, dass

adb shell dpm set-device-owner com.hssoft.deviceadmintest/.DeviceAdmin 

this Artikel wird Ihnen viel helfen.

+0

Ich habe keinen Root-Zugriff auf meinem Gerät, es ist das Hauptproblem) –

+0

Sie wollen nicht root oder Sie wissen nicht, wie man root? –

+1

Ich weiß, wie man Gerät root. Aber in meiner Situation kann ich root nicht benutzen –

Verwandte Themen