【问题标题】:Own custom Android Policy manager [closed]自己的自定义 Android 策略管理器 [关闭]
【发布时间】:2014-02-13 15:22:58
【问题描述】:

我正在为 Android 开发策略管理器。 根据给定的一组规则和设备的当前状态,它应该限制(允许/禁止)用户启动某些应用程序。

我想它应该是一个后台运行的服务,可能会拦截所有启动应用程序的尝试,检查是否正常,如果允许运行则启动它们。如果设备状态表明应该这样做,它也可以自行启动和停止某些应用程序。

有没有办法以编程方式做到这一点?控制哪些应用程序允许在特定时间启动,哪些不允许?还要停止已经运行的应用程序?

总之,有没有办法以编程方式“拦截”启动应用程序的尝试,并可能拒绝这些尝试?

【问题讨论】:

  • 还没有。我正在研究不同的可能性。寻找最佳方法。你有什么想法吗?
  • stackoverflow.com/questions/how-to-ask -- 你的问题在这里跑题了,抱歉。
  • 为什么跑题了?我认为对于许多想要开发这种应用程序的人来说,这是一个相关的话题。我已经更简洁地结束了这个问题。你会考虑现在取消你的反对票吗?
  • 我正在考虑拦截 startActivity 意图,但我不知道这是否是一个可行的解决方案,因为拦截意图可能被视为安全风险,因此可能会被修补,从而使我的应用程序在Android 的未来版本。

标签: android device-policy-manager


【解决方案1】:

我发现了以下名为 AppLocker 的开源项目:

http://code.google.com/p/applocker/source/checkout

它的工作原理是每 100 毫秒检查一次是否有任何其他不允许的活动试图进入 前景。如果是这样,那么 AppLocker 会在其他应用程序的活动有时间到达 OnCreate() 方法之前快速启动自己的阻塞密码请求活动(当然取决于检查前台活动状态的频率)。

然而,这个应用程序似乎不适用于 Android 4.1 以上,因为权限为 READ_LOGS 已被删除。 :-(

但是,似乎在有根设备上,无论如何都可以获取权限。看到这个帖子: READ_LOGS permission on Jelly Bean (api 16)

【讨论】:

    【解决方案2】:

    找到了防止应用被启用/可见的解决方案。

    只需将您的应用程序 apk 从 /data/app 复制到 /sdcard/ 然后卸载应用程序,然后将apk从/sdcard/复制到system/app/ 最后重新启动您的设备。这将赋予您的应用系统特权。

    现在您可以使用以下代码来启用/禁用您的应用(使其 完全不可见,即使在设置菜单中也是如此):

    PackageManager pm=this.getPackageManager(); pm.setApplicationEnabledSetting("com.gueei.applocker",PackageManager.COMPONENT_ENABLED_STATE_DISABLED,0);

    唯一的事情是您必须知道要显示/隐藏的应用程序的包名称。 如果您不将您的 apk 复制到 /system/app/,您将收到权限拒绝错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 2018-05-03
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      相关资源
      最近更新 更多