【问题标题】:devicePolicyManager.lockNow() is not working for Motorola TabletsdevicePolicyManager.lockNow() 不适用于摩托罗拉平板电脑
【发布时间】:2012-02-17 18:13:48
【问题描述】:
public final static void lockDevice()
    {
        try
        {
            if (devicePolicyManager.isAdminActive(adminComponent))
            {
                devicePolicyManager.lockNow();
            }
        }
        catch (final Exception ex)
        {
            ...
        }
    }

上面的代码不会抛出任何异常,也不会锁定摩托罗拉 xoom 平板电脑的屏幕。 (Homeycomb 和 Icecream Sandwitch)相同的代码可以在其他 Homeycomb 和 ICS 平板电脑上完美运行。

我用谷歌搜索,但没有得到任何解决方案。有什么想法.....?

【问题讨论】:

  • 只是好奇您是否使用了USES_POLICY_FORCE_LOCK 我确定您只是问过吗?我还读到 locknow() 是针对摩托罗拉设备的,但不是关于平板电脑而是关于 DroidX。
  • 是的,我有权限USES_POLICY_FORCE_LOCK

标签: android locking motorola block-device device-policy-manager


【解决方案1】:

你需要做三件事:

  1. <receiver> 添加到AndroidManifest
  2. <device-admin>创建新的xml文件
  3. DeviceAdminReceiver 制作新的.kt 文件

这是我所做的 Kotlin 答案(带有代码):stackoverflow.com

【讨论】:

    【解决方案2】:

    此问题的可能原因

    1) 我认为您的 AndroidManifest.xml 中接收器的 meta-data 存在一些问题

    2) 您尚未将正确的类(以 DeviceAdminReceiver 扩展)添加到 adminComponent 或接收器的 android:name 属性。

    在花了很多时间之后,我创建了代码。


    主活动代码

    public class LockerTest extends Activity {
        protected static final int REQUEST_ENABLE = 0;
        DevicePolicyManager devicePolicyManager;
        ComponentName adminComponent;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            Button button = (Button) findViewById(R.id.btn);
            button.setOnClickListener(btnListener);
    
        }
    
        Button.OnClickListener btnListener = new Button.OnClickListener() {
            public void onClick(View v) {
                adminComponent = new ComponentName(LockerTest.this, Darclass.class);
                devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
    
                if (!devicePolicyManager.isAdminActive(adminComponent)) {
    
                    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, adminComponent);
                    startActivityForResult(intent, REQUEST_ENABLE);
                } else {
                    devicePolicyManager.lockNow();
                }
    
            }
        };
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (REQUEST_ENABLE == requestCode) {
                super.onActivityResult(requestCode, resultCode, data);
            }
        }
    
    }
    


    创建一个新类 - Darclass - 代码

    import android.app.admin.DeviceAdminReceiver;
    
    public class Darclass extends DeviceAdminReceiver{
    
    }
    


    在“res”中创建一个文件夹“xml”。然后在“xml”文件夹中创建 my_admin.xml 文件。 my_admin.xml 的代码。注意在</activity>之后和</application>之前添加这个接收者

    <device-admin xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-policies>
            <limit-password />
            <watch-login />
            <reset-password />
            <force-lock />
            <wipe-data />
        </uses-policies>
    </device-admin>
    


    最后将下面给出的接收器添加到您的 AndroidManifest.xml 中

    <receiver
                android:name=".Darclass"
                android:permission="android.permission.BIND_DEVICE_ADMIN" >
                <meta-data
                    android:name="android.app.device_admin"
                    android:resource="@xml/my_admin" />
    
                <intent-filter>
                    <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
                </intent-filter>
            </receiver>
    

    它应该可以在您的设备上运行。

    【讨论】:

    • 感谢您的努力。但是,正如我的问题中提到的,我的代码适用于摩托罗拉 3.1+ 以外的所有其他设备(在 HTC 2.2、野火、Xperia 2.3、Galaxy Tab 3.1、3.2 上测试)。我没有摩托罗拉设备,但在模拟器 XOOM2 3.2、XOOM2ME 3.2 上测试了您的代码,但它不起作用:(。不过我感谢您的努力。这可能是摩托罗拉的一个损坏的 API,我正在寻找一个解决方法。您是否在摩托罗拉平板电脑上测试过您的代码?
    • 我没有摩托罗拉设备。但我认为该代码将适用于摩托罗拉设备。 Emulators. 有一些限制,执行代码可能有问题,但代码可以在实际设备上运行。我很确定会放弃它。
    • 我希望你说的是对的。但遗憾的是它不是。多个客户报告了此问题,其中唯一常见的是摩托罗拉平板电脑。
    • 是的,你的密码是有效的,但我有一个问题,它的锁定设备作为设备管理员锁,意味着我必须一直输入密码才能解锁,在这种情况下我的指纹解锁不是工作,它告诉输入密码,你能告诉我任何建议吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多