2012-06-05 72 views
3

如何調用此時,爲了避免這種異常避免了因「歸無主動管理」的拋出:SecurityException

E/AndroidRuntime(26113): Caused by: java.lang.SecurityException: No active admin owned by uid XXXX for policy #3 

public static void lockScreen(Context context) { 
    Log.d(TAG, "lockScreen"); 
    ComponentName mDeviceAdminSample = null; 
    DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); 
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample); 
    dpm.lockNow(); 
} 

回答

0

您缺少以下行。

mDeviceAdminSample = new ComponentName(this, DeviceAdminSampleReceiver.class); 
0

注意如何行:

 Intent it = new   Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
     it.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, new ComponentName(this, YourAdminReceiver.class)); 
     startActivityForResult(it, 0); 

可以跳過。如果你不想讓你的用戶允許應用鎖屏存在的另一種方法:

adb shell dpm set-device-owner com.package/.YourAdminReceiver 

現在,這是什麼都與拋出:SecurityException的OP是遭遇呢?

那麼,我已經通過adb shell的方式將設備所有者設置爲com.package/.YourAdminReceiver,但出於不同的目的而不是屏幕鎖定。當我加入了<force-lock>標籤到我的設備admin.xml的:

<uses-policies> 
     <limit-password /> 
     <reset-password /> 
     <force-lock /> 
    </uses-policies> 

我很自然地期待我locknow() API調用來工作,而是它沒有。就像OP一樣,我得到了SecurityException。奇怪的是,鑑於我的應用程序已經是設備的管理員和擁有者。我已經通過從設備所有者角色取消設置,卸載並重新安裝它。請注意,一旦通過adb外殼設置爲設備所有者,應用程序只能從該代碼中取消設置:

//  mDpm.clearDeviceOwnerApp(getPackageName()); 
//  mDpm.removeActiveAdmin(deviceAdmin); 
相關問題