如何远程控制Android手机,为所欲为?

一、激活设备管理器

      使用MDM功能要先激活设备管理器

640?wx_fmt=png

代码如下:

/**	
     * 激活设备管理权限 成功执行激活时,DeviceAdminReceiver中的 onEnabled 会响应	
     */	
    private void activeManage() {	
        // 启动设备管理(隐式Intent) - 在AndroidManifest.xml中设定相应过滤器	
        Intent intents = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);	

	
        // 权限列表	
        intents.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);	

	
        // 描述(additional explanation)	
        intents.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,	
                "------ 其他描述 ------");	

	
        startActivityForResult(intents, 0);	
    }

二、可以远程对设备做哪些操作

要先获得DevicePolicyManager实例才可以进行控制操作

DevicePolicyManager mDPM = (DevicePolicyManager) mContext	
        .getSystemService(Context.DEVICE_POLICY_SERVICE);

1、控制锁屏

mDPM.lockNow();

2、控制摄像机的使用

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)	
  public int setCameraDisabled(boolean disableCamera) {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL < 14) {	
        return ERROR_UNSUPPORTED;	
      }	
      mDPM.setCameraDisabled(mDeviceAdminSample, disableCamera);	
      return 0;	
    } else {	
      //	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	

	
  public boolean getCameraDisabled() {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL < 14) {	
        return false;	
      }	
      return mDPM.getCameraDisabled(mDeviceAdminSample);	
    } else {	
      //	
      activateDeviceAdmin();	
      return false;	
    }	
  }

3、控制密码

public int resetPasswd(String newPasswd) {	
    if (isDeviceAdminActive()) {	
      boolean succeed = mDPM.resetPassword(newPasswd,	
          DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);	
      if (succeed) {	
        return 0;	
      } else {	
        return ERROR_PASSWD_QUALITY;	
      }	
    } else {	
      // 激活时间与用户的操作有关,所以不等待,直接返回操作失败	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	
  	
  	
  public int setPasswdQuality(int value) {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL < 11) {	
        return ERROR_UNSUPPORTED;	
      }	
      mDPM.setPasswordQuality(mDeviceAdminSample, value);	
      return 0;	
    } else {	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	

	
  public String getPasswordQuality() {	
    if (isDeviceAdminActive()) {	
      int quality = mDPM.getPasswordQuality(mDeviceAdminSample);	
      switch (quality) {	
      case DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK:	
        return "图案";	
      case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:	
        return "数字";	
      case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC:	
        return "字母";	
      case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:	
        return "数字和字母";	
      default:	
        return "其它";	
      }	
    } else {	
      activateDeviceAdmin();	
      return "未知";	
    }	
  }	

	
  public int setPasswordMinimumLength(int value) {	
    if (isDeviceAdminActive()) {	
      mDPM.setPasswordMinimumLength(mDeviceAdminSample, value);	
      return 0;	
    } else {	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	

	
  /*	
   * -1无法获取	
   */	
  public int getPasswordMinimumLength() {	
    if (isDeviceAdminActive()) {	
      return mDPM.getPasswordMinimumLength(mDeviceAdminSample);	
    } else {	
      activateDeviceAdmin();	
      return -1;	
    }	
  }	

	
  // TODO: 2017-2-7  策略信息中并没有该项	
  @TargetApi(Build.VERSION_CODES.HONEYCOMB)	
  public int setPasswordMinimumLetters(int value) {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL < 11) {	
        return ERROR_UNSUPPORTED;	
      }	
      mDPM.setPasswordMinimumLetters(mDeviceAdminSample, value);	
      return 0;	
    } else {	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	

	
  @TargetApi(Build.VERSION_CODES.HONEYCOMB)	
  public int setPasswordMinimumNumeric(int value) {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL < 11) {	
        return ERROR_UNSUPPORTED;	
      }	
      mDPM.setPasswordMinimumNumeric(mDeviceAdminSample, value);	
      return 0;	
    } else {	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	

	
  @TargetApi(Build.VERSION_CODES.HONEYCOMB)	
  public int setPasswordMinimumLowerCase(int value) {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL < 11) {	
        return ERROR_UNSUPPORTED;	
      }	
      mDPM.setPasswordMinimumLowerCase(mDeviceAdminSample, value);	
      return 0;	
    } else {	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	

	
  @TargetApi(Build.VERSION_CODES.HONEYCOMB)	
  public int setPasswordMinimumUpperCase(int value) {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL < 11) {	
        return ERROR_UNSUPPORTED;	
      }	
      mDPM.setPasswordMinimumUpperCase(mDeviceAdminSample, value);	
      return 0;	
    } else {	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	

	
  @TargetApi(Build.VERSION_CODES.HONEYCOMB)	
  public int setPasswordMinimumSymbols(int value) {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL < 11) {	
        return ERROR_UNSUPPORTED;	
      }	
      mDPM.setPasswordMinimumSymbols(mDeviceAdminSample, value);	
      return 0;	
    } else {	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	

	
  /*	
   * -1无法获取	
   */	
  public int getPasswordMinimumSymbols() {	
    if (isDeviceAdminActive()) {	
      return mDPM.getPasswordMinimumSymbols(mDeviceAdminSample);	
    } else {	
      activateDeviceAdmin();	
      return -1;	
    }	
  }	

	
  @TargetApi(Build.VERSION_CODES.HONEYCOMB)	
  public int setPasswordMinimumNonLetter(int value) {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL < 11) {	
        return ERROR_UNSUPPORTED;	
      }	
      mDPM.setPasswordMinimumNonLetter(mDeviceAdminSample, value);	
      return 0;	
    } else {	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	

	
  @TargetApi(Build.VERSION_CODES.HONEYCOMB)	
  public int setPasswordHistoryLength(int value) {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL < 11) {	
        return ERROR_UNSUPPORTED;	
      }	
      mDPM.setPasswordHistoryLength(mDeviceAdminSample, value);	
      return 0;	
    } else {	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	

	
  /*	
   * -1无法获取	
   */	
  public int getPasswordHistoryLength() {	
    if (isDeviceAdminActive()) {	
      return mDPM.getPasswordHistoryLength(mDeviceAdminSample);	
    } else {	
      activateDeviceAdmin();	
      return -1;	
    }	
  }	

	
  @TargetApi(Build.VERSION_CODES.HONEYCOMB)	
  public int setPasswordExpirationTimeout(int value) {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL < 11) {	
        return ERROR_UNSUPPORTED;	
      }	
      mDPM.setPasswordExpirationTimeout(mDeviceAdminSample, value	
          * MS_PER_DAY);	
      return 0;	
    } else {	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }	

	
  /*	
   * -1无法获取	
   */	
  public long getPasswordExpirationTimeout() {	
    if (isDeviceAdminActive()) {	
      long ret = mDPM.getPasswordExpirationTimeout(mDeviceAdminSample);	
      return ret / MS_PER_DAY;	
    } else {	
      activateDeviceAdmin();	
      return -1;	
    }	
  }

4、控制蓝牙

// 打开、关闭蓝牙	
  public int setBluetoothState(boolean enable) {	
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter	
        .getDefaultAdapter();	
    if (bluetoothAdapter == null) {	
      return ERROR_UNSUPPORTED;	
    }	
    if (enable) {	
      bluetoothAdapter.enable();	
    } else {	
      bluetoothAdapter.disable();	
    }	
    return 0;	
  }

5、WIFI控制相关

public int getWifiState() {	
    android.net.wifi.WifiManager wifiManager = (android.net.wifi.WifiManager) mContext	
        .getSystemService(Context.WIFI_SERVICE);	
    return wifiManager.getWifiState();	
  }	

	
  // 打开、关闭wifi	
  public void setWifiState(boolean enable) {	
    android.net.wifi.WifiManager wifiManager = (android.net.wifi.WifiManager) mContext	
        .getSystemService(Context.WIFI_SERVICE);	
    wifiManager.setWifiEnabled(enable);	
  }	

	
  // 打开、关闭wifi	
  public void disconnectWifi() {	
    android.net.wifi.WifiManager wifiManager = (android.net.wifi.WifiManager) mContext	
        .getSystemService(Context.WIFI_SERVICE);	
    wifiManager.getConnectionInfo().getNetworkId();	
    WifiAdmin wifiAdmin = new WifiAdmin(mContext);	
    wifiAdmin.disconnectWifi(wifiManager.getConnectionInfo().getNetworkId());	
    //wifiManager.disconnect();	
  }

6、设置静音

// 设置静音	
  public int setMute(boolean setMute) {	
    if (setMute) {	
      AudioManager audioManager = (AudioManager) mContext	
          .getSystemService(Context.AUDIO_SERVICE);	
      audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0); // mute	
                                      // music	
                                      // stream	
      audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0); // mute	
                                      // ring	
                                      // stream	
      if (Build.VERSION.SDK_INT >= 8) {	
        audioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC,	
            AudioManager.AUDIOFOCUS_GAIN);	
        audioManager.requestAudioFocus(null, AudioManager.STREAM_RING,	
            AudioManager.AUDIOFOCUS_GAIN);	
      }	
    } else {	
      AudioManager audioManager = (AudioManager) mContext	
          .getSystemService(Context.AUDIO_SERVICE);	
      int maxMusic = audioManager	
          .getStreamMaxVolume(AudioManager.STREAM_MUSIC);	
      audioManager	
          .setStreamVolume(AudioManager.STREAM_MUSIC, maxMusic, 0); // mute	
      // music	
      // stream	
      int maxRing = audioManager	
          .getStreamMaxVolume(AudioManager.STREAM_RING);	
      audioManager.setStreamVolume(AudioManager.STREAM_RING, maxRing, 0); // mute	
      // ring	
      // stream	
      if (Build.VERSION.SDK_INT >= 8) {	
        audioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC,	
            AudioManager.AUDIOFOCUS_GAIN);	
        audioManager.requestAudioFocus(null, AudioManager.STREAM_RING,	
            AudioManager.AUDIOFOCUS_GAIN);	
      }	
    }	
    return 0;	
  }

7、恢复出厂设置

@TargetApi(Build.VERSION_CODES.GINGERBREAD)	
  public int wipeData(boolean withExternalStorage) {	
    if (isDeviceAdminActive()) {	
      if (API_LEVEL >= 9) {	
//        mDPM.wipeData(withExternalStorage ? DevicePolicyManager.WIPE_EXTERNAL_STORAGE	
//            : 0);	
        mDPM.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);	
      } else {	
        // WIPE_EXTERNAL_STORAGE is not supported under API level 9	
        mDPM.wipeData(0);	
      }	

	
      return 0;	
    } else {	
      activateDeviceAdmin();	
      return ERROR_UNACTIVATED;	
    }	
  }

要想实现更多的管理服务得去不同厂家申请了,比如申请加入APP白名单的接口,wifi黑白名单的各种黑操作之类的。

有问题欢迎留言讨论

热文推荐:

1、大厂又有新的开源项目了,赶紧来领取…

2、面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来…

3、程序员疑似出bug被吊打!菲律宾的高薪工作机会了解一下?

4、“一键脱衣”的DeepNude下架后,我在GitHub上找到它涉及的技术

5、原生Android开发的路该怎么走

6、太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

7、腾讯开源超实用的UI轮子库,我是轮子搬运工

8、腾讯新开源一吊炸天神器—零反射全动态Android插件框架正式开源

                        喜欢 就关注吧,欢迎投稿!

640?wx_fmt=jpeg

本网站文章均为原创内容,并可随意转载,但请标明本文链接
如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: https://leetcode.jp/如何远程控制android手机,为所欲为?/

此条目发表在Android分类目录。将固定链接加入收藏夹。

发表评论

您的电子邮箱地址不会被公开。