2016-04-28 23 views
6

Próbuję ekranu pin programowo na Android L. Moja aplikacja zawiera plik xml zDlaczego isLockTaskPermitted flaga jest fałszywy

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

zainstalowałem aplikację z odpowiednich linii w pliku AndroidManifest gdzie zdefiniowane AdminReceiver. Wszystko działało dobrze kilka tygodni temu, ale teraz, kiedy wróciłem do tego projektu - aplikacja poprosiła mnie o potwierdzenie okienka "Pin screen" za każdym razem, gdy aplikacja się uruchamia.

Kiedy jestem debugowania zauważyłem dziwne zachowanie devicePolicyManager.isAdminActive(componentName) prawda devicePolicyManager.isDeviceOwnerApp(getPackageName()) prawda

ale

devicePolicyManager.isLockTaskPermitted(getPackageName()) jest fałszywa

To nie ma znaczenia, czy mogę ustawić aplikację jako właściciela urządzenia za pomocą adb pochwalić dpm set-device-owner ... lub przesyłając plik device_owner.xml do/data/system/

Moje pytanie brzmi: dlaczego aplikacja nie ma uprawnień do blokowania ekranu?

Odpowiedz

2

Do tego trzeba zadzwonić setLockTaskPackages()

kod Powinieneś coś jak poniżej.

Twoja aktywność powinna mieć

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> 
Powiązane problemy