2

我最近创建了一个锁屏小部件应用程序。它总是有例外:

( java.lang.SecurityException: No active admin owned by uid 10034 for policy #3)

我尝试了很多方法,都无法消除异常。当条件成立时,我打开活动来实现锁屏的目的。

public class tempActivity extends Activity {
    private static final String TAG = "tempActivity"; 
    private DevicePolicyManager policyManager;
    private ComponentName componentName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.temp);
        Log.e(TAG, "Activity created~");
        policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        componentName = new ComponentName(this, AdminReceiver.class);
        mylock();
    }

    private void mylock() {
        boolean active = policyManager.isAdminActive(componentName);
        if (!active) { // Without permission
            Log.e(TAG, "No authority~");
            activeManage(); // To get access
            policyManager.lockNow(); // And lock screen
        } else {
            Log.e(TAG, "Has authority");
            policyManager.lockNow(); // lock screen directly
        }
        this.finish();
    }

    private void activeManage() {
        Log.e(TAG, "activeManage");
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "developers:liushuaikobe");
        startActivityForResult(intent, 1);
    }
}
4

2 回答 2

1

关键是当设备管理员未激活时,您的提示调用 (ACTION_ADD_DEVICE_ADMIN) 仅确保向用户显示激活意图。如果他或她选择不激活(这很有可能),下一行中的 lock 命令将失败并给出您现在遇到的错误。所以,基本上你只能提示用户激活设备管理员,而不是强制他们。删除 if not active 块中的 lockNow 调用以避免错误。希望这可以帮助。-SB

于 2013-04-29T06:26:43.450 回答
-1

尝试:

if(Build.VERSION.SDK_INT > 8){
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
于 2013-02-26T09:22:15.440 回答