2012-10-28 90 views
10

我想添加一个按钮到我的应用程序将其从设备管理器中删除它,并使用下面的代码,但我的应用程序只是崩溃。Android:以编程方式从设备管理员删除我的应用程序?

代码: -

在按钮点击: -

{ 
    ComponentName devAdminReceiver = new ComponentName(this, DemoDeviceAdminReceiver.class); 
    DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 
    dpm.removeActiveAdmin(devAdminReceiver); 
} 

在上面的代码,DemoDeviceAdminReceiver是扩展DeviceAdminReceiver类。

错误日志: -

10-28 15:26:09.295: E/AndroidRuntime(26101): FATAL EXCEPTION: main 
10-28 15:26:09.295: E/AndroidRuntime(26101): java.lang.IllegalArgumentException: Unknown admin: ComponentInfo{com.dragonnis.intellicover/com.dragonnis.intellicover.DemoDeviceAdminReceiver} 
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.os.Parcel.readException(Parcel.java:1331) 
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.os.Parcel.readException(Parcel.java:1281) 
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.app.admin.IDevicePolicyManager$Stub$Proxy.removeActiveAdmin(IDevicePolicyManager.java:2940) 
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.app.admin.DevicePolicyManager.removeActiveAdmin(DevicePolicyManager.java:183) 

回答

14

这是为你做的:

DevicePolicyManager mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 
mDPM.removeActiveAdmin(mDeviceAdminReceiver); 

但是,你需要这些过滤器在AndroidManifest.xml添加到接收器:

<intent-filter> 
     <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
     <action android:name="android.app.action.DEVICE_ADMIN_DISABLED" /> 
    </intent-filter> 


@Override 
public CharSequence onDisableRequested(Context context, Intent intent) { 
    return "Admin rights are beeing requested to be disabled for the app called: '" + context.getString(R.string.app_name) + "'."; 
} 
+0

让我知道它是否有帮助。 – ViliusK

+0

感谢您的快速响应。意图过滤器已经存在于AndroidManifest.xml文件中。设备管理员已启用,但尝试删除仍然导致崩溃。 –

+0

哦,修好了。问题出在DeviceAdminReceiver类。我正在使用一个单独的类来启用设备管理员,但是当我尝试删除它时,我正在使用不同的DeviceAdminReceiver,它甚至没有作为设备管理员启用。傻我。谢谢你的帮助。 –

相关问题