我的应用中有两项活动。
活动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但我真的没有得到最终答案。有人可以帮帮我吗?
答案 0 :(得分:0)
我一直在寻找更多时间。最后,我有一个流程这个代码的解决方案 从活动B,我只需要那样做
policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
adminComponent = new ComponentName(this,PermissionReceiver.class);
if (policyManager.isAdminActive(adminComponent)) {
lockScreen(policyManager);
}
工作正常,谢天谢地!