如何通过其他活动调用带参数的函数DevicePolicyManager?

时间:2014-07-12 13:43:38

标签: android android-activity

我的应用中有两项活动。

活动A

        adminComponent = new ComponentName(MainActivity.this,PermissionReceiver.class);
        policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

        if (policyManager.isAdminActive(adminComponent)) {
            lockScreen(policyManager);
        }

我可以调用lockScreen函数,它工作正常,但如何从Activity B调用此函数? 我在活动B

中尝试此代码
DevicePolicyManager policyManager = (DevicePolicyManager) getSystemService(MainActivity.DEVICE_POLICY_SERVICE);
lockScreen(policyManager);

但我得到例外07-12 22:38:36.939: E/AndroidRuntime(14061): java.lang.SecurityException: No active admin owned by uid 10245 for policy #3

lockScreen功能

public void lockScreen(final DevicePolicyManager aPolicyManager) {
    final PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    final Handler handler = new Handler(getMainLooper());
    final int[] retryCount = new int[] { 0 };

handler.post(new Runnable() {
    @SuppressWarnings("deprecation")
    @Override
    public void run() {
        if (powerManager.isScreenOn()&& retryCount[0] <= MAX_RETRY_COUNT) {
            aPolicyManager.lockNow();
            //unregisterReceiver(turnOffScreenReciever);
            retryCount[0]++;
            handler.postDelayed(this, RETRY_DELAY * retryCount[0]);
        } else {
            finish();
        }
    }
});

}

这与此链接的问题类似     Cannot always launch DevicePolicyManager activity from another activity但我真的没有得到最终答案。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

我一直在寻找更多时间。最后,我有一个流程这个代码的解决方案 从活动B,我只需要那样做

policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        adminComponent = new ComponentName(this,PermissionReceiver.class);
        if (policyManager.isAdminActive(adminComponent)) {
            lockScreen(policyManager);
        }

工作正常,谢天谢地!

相关问题