【问题标题】:Android: Programmatically remove my app from Device Administrator?Android:以编程方式从设备管理员中删除我的应用程序?
【发布时间】:2023-03-18 11:36:01
【问题描述】:

我正在尝试向我的应用添加一个按钮以将其从设备管理员中删除,并且我正在使用下面的代码,但我的应用只是崩溃了。

代码:-

点击按钮:-

{
    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)

【问题讨论】:

    标签: android components device-admin


    【解决方案1】:

    就像你做的那样:

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

    但是你需要将这些过滤器添加到AndroidManifest.xml中的receiver中:

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

    【讨论】:

    • 感谢您的快速响应。意图过滤器已经存在于 AndroidManifest.xml 文件中。设备管理员已启用,但尝试删除仍会导致崩溃。
    • 哦,修好了。问题出在 DeviceAdminReceiver 类上。我正在使用一个单独的类来启用设备管理员,但是当我尝试删除它时,我使用了一个不同的 DeviceAdminReceiver,它甚至没有作为设备管理员启用。傻我。感谢您的帮助。
    • @ViliusK 如果我的应用有设备管理员权限,我们可以禁用其他应用的设备管理员权限吗?
    • @rup35h 不。这里的答案是:stackoverflow.com/questions/19908226/…
    【解决方案2】:

    编写了一个启用并安装了设备管理员 (DevicePolicyManager) 的应用。但是当我想卸载它时,它返回失败并显示此消息

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2013-11-23
    • 2012-05-16
    • 2011-08-09
    • 2013-06-05
    • 1970-01-01
    • 2012-06-15
    • 2014-07-02
    • 2012-12-23
    • 2012-04-07
    相关资源
    最近更新 更多