2016-04-28 3 views
6

Je suis en train d'épingler l'écran sur Android programme L. Mon application inclut un fichier xml avecdrapeau isLockTaskPermitted est faux

<?xml version="1.0" encoding="utf-8"?> 
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> 
    <uses-policies> 
     <force-lock/> 
     <watch-login/> 
     <disable-camera/> 
     <disable-keyguard-features/> 
     <encrypted-storage/> 
     <expire-password/> 
     <limit-password/> 
     <reset-password/> 
     <set-global-proxy/> 
     <wipe-data/> 
    </uses-policies> 
</device-admin> 

J'ai installé l'application avec des lignes appropriées dans le fichier AndroidManifest où je définissais AdminReceiver. Tout a bien fonctionné il y a quelques semaines, mais en ce moment, quand je suis revenu à ce projet - App me demande de confirmer "pop-up" pop-up popup chaque fois que l'application commence.

Quand je suis débogage j'ai remarqué un comportement étrange devicePolicyManager.isAdminActive(componentName) est vrai devicePolicyManager.isDeviceOwnerApp(getPackageName()) est vrai

mais

devicePolicyManager.isLockTaskPermitted(getPackageName()) est faux

Peu importe si je mis l'application en tant que propriétaire de l'appareil à l'aide adb recommande dpm set-device-owner ... ou en poussant le fichier device_owner.xml à/data/system/

Ma question est pourquoi l'application n'a pas la permission de verrouiller l'écran?

Répondre

2

Pour cela, vous devez appeler setLockTaskPackages()

Code Vous devez quelque chose comme ci-dessous.

Votre activité devrait avoir

ComponentName mAdminComponentName = DeviceAdminReceiver.getComponentName(this); 
//where this will be your Activity 

DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) 
       getSystemService(Context.DEVICE_POLICY_SERVICE); 

mDevicePolicyManager.setLockTaskPackages(mAdminComponentName,new String[]{getPackageName()}); 

DeviceAdminReceiver.java

// Copyright 2016 Google Inc. 
// 
// Licensed under the Apache License, Version 2.0 (the "License"); 
// you may not use this file except in compliance with the License. 
// You may obtain a copy of the License at 
// 
//  http://www.apache.org/licenses/LICENSE-2.0 
// 
// Unless required by applicable law or agreed to in writing, software 
// distributed under the License is distributed on an "AS IS" BASIS, 
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
// See the License for the specific language governing permissions and 
// limitations under the License. 

package com.google.codelabs.cosu; 

/** 
* Created by nyfuchs on 4/26/16. 
*/ 

import android.content.ComponentName; 
import android.content.Context; 

/** 
* Handles events related to the managed profile. 
*/ 
public class DeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver { 
    private static final String TAG = "DeviceAdminReceiver"; 

    /** 
    * @param context The context of the application. 
    * @return The component name of this component in the given context. 
    */ 
    public static ComponentName getComponentName(Context context) { 
     return new ComponentName(context.getApplicationContext(), DeviceAdminReceiver.class); 
    } 
} 

AndroidManifest.xml

<receiver 
     android:name="com.google.codelabs.cosu.DeviceAdminReceiver" 
     android:description="@string/app_name" 
     android:label="@string/app_name" 
     android:permission="android.permission.BIND_DEVICE_ADMIN"> 
     <meta-data 
      android:name="android.app.device_admin" 
      android:resource="@xml/device_admin_receiver" /> 
     <intent-filter> 
      <action android:name="android.intent.action.DEVICE_ADMIN_ENABLED"/> 
      <action android:name="android.intent.action.PROFILE_PROVISIONING_COMPLETE"/> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver>