问题 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)

12205
2017-10-28 10:17


起源



答案:


就像你一样:

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) + "'.";
}

16
2017-10-28 10:39



如果有帮助,请告诉我。 - ViliusK
感谢您的快速反应。意图过滤器已存在于AndroidManifest.xml文件中。设备管理员启用很好,但尝试删除仍然导致崩溃。 - Jasjit Singh Marwah
哦,修好了。问题出在DeviceAdminReceiver类上。我使用单独的类来启用设备管理员,但是当我尝试删除它时,我使用的是另一个甚至没有启用设备管理员的DeviceAdminReceiver。傻我。谢谢你的帮助。 - Jasjit Singh Marwah
@ViliusK如果我的应用具有设备管理员权限,我们可以禁用其他应用的设备管理员权限吗? - rup35h
@ rup35h没有。这里回答: stackoverflow.com/questions/19908226/... - ViliusK


答案:


就像你一样:

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) + "'.";
}

16
2017-10-28 10:39



如果有帮助,请告诉我。 - ViliusK
感谢您的快速反应。意图过滤器已存在于AndroidManifest.xml文件中。设备管理员启用很好,但尝试删除仍然导致崩溃。 - Jasjit Singh Marwah
哦,修好了。问题出在DeviceAdminReceiver类上。我使用单独的类来启用设备管理员,但是当我尝试删除它时,我使用的是另一个甚至没有启用设备管理员的DeviceAdminReceiver。傻我。谢谢你的帮助。 - Jasjit Singh Marwah
@ViliusK如果我的应用具有设备管理员权限,我们可以禁用其他应用的设备管理员权限吗? - rup35h
@ rup35h没有。这里回答: stackoverflow.com/questions/19908226/... - ViliusK