devicePolicyManager.lockNow()不适用于Motorola Tablets

PC.*_*PC. 9 android locking motorola block-device device-policy-manager

public final static void lockDevice()
    {
        try
        {
            if (devicePolicyManager.isAdminActive(adminComponent))
            {
                devicePolicyManager.lockNow();
            }
        }
        catch (final Exception ex)
        {
            ...
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

我用Google搜索,但没有得到任何解决方案.有任何想法吗.....?

Viv*_*vek 23

这个问题的可能原因

1)我认为AndroidManifest.xml中接收者的元数据存在一些问题

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);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)


创建一个新类 - Darclass - 代码

import android.app.admin.DeviceAdminReceiver;

public class Darclass extends DeviceAdminReceiver{

}
Run Code Online (Sandbox Code Playgroud)


在'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>
Run Code Online (Sandbox Code Playgroud)


最后将下面给出的接收器添加到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>
Run Code Online (Sandbox Code Playgroud)

它应该适用于您的设备.

  • 是的,你的代码正在工作,但我有一个问题,它的锁定设备作为设备管理员锁,意味着我必须一直输入密码才能解锁,在这种情况下我的指纹解锁不起作用,它告诉输入密码,你能告诉我什么建议吗?? (2认同)