Why isLockTaskPermitted flag is false

I am trying to set up a program screen on Android L. My application includes an xml file with

<?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> 

I installed the application with the corresponding lines in the AndroidManifest file, where I defined AdminReceiver. Everything went fine a few weeks ago, but now that Iโ€™ve returned to this project, the application will ask me to confirm the "Pin screen" popup every time the application starts.

When I debug, I noticed the strange behavior of devicePolicyManager.isAdminActive(componentName) true devicePolicyManager.isDeviceOwnerApp(getPackageName()) true

but

devicePolicyManager.isLockTaskPermitted(getPackageName()) false

It doesnโ€™t matter if I install the application as the owner of the device using adb commend dpm set-device-owner ... or by clicking the device_owner.xml file in / data / system /

My question is: why the application does not have permission to lock the screen?

+6
source share
1 answer

To do this, you must call setLockTaskPackages ()

You should do something like below.

Your activity should be

 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> 
+2
source

All Articles