【问题标题】:Why isLockTaskPermitted flag is false为什么 isLockTaskPermitted 标志为假
【发布时间】:2016-08-22 20:37:22
【问题描述】:

我正在尝试在 Android L 上以编程方式固定屏幕。 我的应用程序包含带有

的 xml 文件
<?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>

我在定义 AdminReceiver 的 AndroidManifest 文件中安装了具有正确行的应用程序。 几周前一切正常,但现在当我回到这个项目时 - 应用程序每次启动时都会要求我确认“Pin screen”弹出窗口。

在调试时,我注意到奇怪的行为 devicePolicyManager.isAdminActive(componentName) 是真的 devicePolicyManager.isDeviceOwnerApp(getPackageName()) 是真的

但是

devicePolicyManager.isLockTaskPermitted(getPackageName()) 为假

我是否使用 adb 推荐 dpm set-device-owner ... 或将 device_owner.xml 文件推送到 /data/system/ 将应用程序设置为设备所有者都没有关系

我的问题是为什么应用没有锁屏权限?

【问题讨论】:

    标签: java android xml locking kiosk-mode


    【解决方案1】:

    为此,您必须调用 setLockTaskPackages()

    你的代码应该如下所示。

    你的 Activity 应该有

    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>
    

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      相关资源
      最近更新 更多