如何在我的应用程序中实现applock advance protection等功能

时间:2016-02-02 22:14:17

标签: android

我想让android.app lock中类似于 AppLock 的应用程序具有提前保护功能,该功能可以停止卸载应用程序。它可以解除手机的生根问题。 我一起尝试了几个小时,尝试了很多来自stackoverflow的类似问题的解决方案,但无法通过它。

  

在执行此操作时,我遇到了“设备管理员权限”。

  1. 我可以使用管理员权限做我想做的事。

  2. 如果不是 AppLock 预先保护的方式,我的意思是如何限制用户卸载应用程序。

2 个答案:

答案 0 :(得分:1)

您需要将您的应用设为设备所有者 - 它具有比设备管理应用更高的权限。

有关详细信息,请参阅 - http://florent-dupont.blogspot.com/2015/02/10-things-to-know-about-device-owner.html和此处https://source.android.com/devices/tech/admin/provision.html

您可以使用admins / owner app设置策略,以防止卸载。

您还可以查看OEM提供的MDM解决方案。三星拥有非常强大的API来管理设备的各个方面 - https://www.samsungknox.com/en/partners/mobile-device-managers

答案 1 :(得分:0)

解决方案是使用:设备管理API

设备管理API专为企业应用程序设计。此API在系统级别提供管理功能。

所以它是如何运作的?

您可以使用设备管理API编写用户在其设备上安装的设备管理应用程序。设备管理应用程序强制执行所需的策略。以下是它的工作原理:

如果用户未启用设备管理应用程序,它将保留在设备上,但处于非活动状态。用户不会受其政策约束,反过来也不会获得任何应用程序的好处 - 例如,他们可能无法同步数据。

如果用户未能遵守这些策略(例如,如果用户设置了违反指南的密码),则应由应用程序决定如何处理此问题。但是,通常这会导致用户无法同步数据。

如果设备尝试连接到需要设备管理API不支持的策略的服务器,则不允许连接。设备管理API当前不允许部分配置。换句话说,如果设备(例如,旧设备)不支持所有规定的策略,则无法允许设备连接。

如果设备包含多个已启用的管理应用程序,则会强制执行最严格的策略。无法定位特定的管理应用程序。

要卸载现有设备管理应用程序,用户需要先以管理员身份取消注册该应用程序。

以下是实现相同的示例代码:

    import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.util.Log;
import android.view.Menu;

public class ActiveDevicePolicy extends Activity {
 private DevicePolicyManager activeDevicePolicyManager;
 private final String LOG_TAG = "ActiveDevicePolicy";
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_active_device_policy);
 activeDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
 List<ComponentName> activeAdmins = activeDevicePolicyManager.getActiveAdmins();
 if(activeAdmins != null && !activeAdmins.isEmpty()){
 for(int index = 0; index < activeAdmins.size(); index++ ){
 Log.i(LOG_TAG, "flattenToShortString: "+ activeAdmins.get(index).flattenToShortString());
 Log.i(LOG_TAG, "flattenToString: "+ activeAdmins.get(index).flattenToString());
 Log.i(LOG_TAG, "getClassName: "+ activeAdmins.get(index).getClassName());
 Log.i(LOG_TAG, "getPackageName: "+ activeAdmins.get(index).getPackageName());
 Log.i(LOG_TAG, "getShortClassName: "+ activeAdmins.get(index).getShortClassName());
 Log.i(LOG_TAG, "toShortString: "+ activeAdmins.get(index).toShortString()); 
 }
 } else {
 Log.i(LOG_TAG, "No Active Device Policy Manager");
 }
 }

}

在上面的代码中,我调用了DevicePolicyManager.getActiveAdmins()方法来检索当前处于活动状态的所有管理员的列表。现在有趣的部分是,因为它返回一个列表;该列表中可能有多个设备管理员。所以最严格的政策仍然活跃!

希望它有所帮助!