2017-08-29 45 views
4

有些应用程序可以检测到他们从电话/设备管理员删除的时间。我在Android开发者网站上搜索过,当用户点击我们在电话/设备管理器中的应用程序旁边的“打勾”复选框时,找不到触发该标志或接收器的标志或接收器。检测从电话/设备管理员删除的应用程序

回答

0

在广播接收器中,存在从DeviceAdminReceiver类延伸的回调函数,如下所示。一旦用户点击取消激活按钮,此功能在设备管理员关闭应用程序之前调用onDisableRequested,用户单击取消激活后,它会调用onDisabled。 首先,我们必须调用启动器(主屏幕),然后锁定设备。 如果我们使用此逻辑,用户将无法停用。如果有更多的优化方式可以随意分享/更新。

@Override 
    public CharSequence onDisableRequested(Context context, Intent intent) { 
      Intent homeScreenIntent = new Intent(Intent.ACTION_MAIN); 
      homeScreenIntent.addCategory(Intent.CATEGORY_HOME); 
      homeScreenIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(homeScreenIntent); 
      DevicePolicyManager deviceManger; 
      deviceManger = (DevicePolicyManager) context.getSystemService(
        Context.DEVICE_POLICY_SERVICE); 
      deviceManger.lockNow(); 
     return context.getString("App won't work if you disable this setting"); 
    } 
+0

你的问题是关于*检测*当用户移除设备管理员,而不是防止它。这并没有回答这个问题。 – Fred

+0

此外,由于用户无法卸载设备管理员,因此这会阻止用户卸载您的应用,并且他们将被迫重置设备。除非你想要对你的应用程序进行糟糕的评论,否则你不应该那样做 – Fred

+0

我的问题是关于“检测应用程序”被“删除”,并且您的答案没有资格,因为您给onDisabled(Context,Intent)函数作为答案,这是不正确的。你必须使用onDisableRequested来知道他们是否被删除。你告诉你的那个已经被删除(不会被删除)。除了第二条评论之外,还需要在onDisableRequested函数上设置一个标志,以防止用户始终无法卸载,只是首选项不再检查。 –

0

设备管理员在被用户禁用时会收到动作ACTION_DEVICE_ADMIN_DISABLED,您可以在onDisabled(Context, Intent)中处理该动作。您仍然可以在onDisabled方法中使用DevicePolicyManager特权API,但不能在返回后使用。

+0

但我想阻止它禁用我的应用程序。如果我在onDisabled中写了一些东西,那么用户已经禁用了它。 onDisableRequested(上下文上下文,意图意图)中有另一个函数,我可以在用户禁用之前编写一个警告消息。但是,如果我在这里以手动方式锁定手机,则在用户解锁手机后,它仍会从同一屏幕继续。我怎样才能防止它? –

+0

如果用户尝试禁用设备管理员(在onDisabled中),则可以擦除设备(出厂重置),这会删​​除您希望保护的任何明智数据。 由于用户无论如何都可以擦除设备,并且会删除设备管理员,所以这是最好的选择。 – Fred

+0

如果您正在寻找更强大的功能,如防止出厂重置或在出厂重置后防止使用设备,您可以尝试设备所有者模式,该模式需要在首次设置设备时进行设置。有关[我的这个响应]中的两种模式的更多细节(https://stackoverflow.com/a/45632137/4816506)。 – Fred

相关问题