華為手機遠程協助父母手機
手機怎樣遠程控制電腦和手機?有時候,我們可能會有這種需求——需要通過自己的手機遠程操作控制電腦或手機,比方說,遠程協助指導家里老人操作手機;再比如,疫情嚴重居家隔離時,需要遠程操控公司電腦獲取工作資料...
2025.07.04COPYRIGHT ? 2023
粵ICP備2021108052號
郵箱:611661226@qq.com
留言給我今天我們介紹一下MDM,看了下邊的介紹你就知道如何控制自己的設備了,首先介紹一下MDM是什么的縮寫,MDM是什么?MDM 是 (Mobile Device Management )的縮寫,中文翻譯過來就是移動設備管理。隨著移動設備計算能力地增強,移動設備攜帶越來越方便,移動化辦公已經成為一種潮流,一種趨勢,企業對移動設備管理的需求越來越急切。MDM是企業IT 向移動互聯網過渡的平臺技術,幫助企業將IT管理能力從傳統的 PC 延伸到移動設備甚至 移動應用APP 。隨著時間的發展, MDM 廠商逐漸擴展出 MAM (Mobile Application Management)移動設備的應用程序管理,MEM(Mobile Email Management)移動設備的郵件管理和 MCM (Mobile Content Management)移動設備的內容管理等更多功能,但是MDM是這些管理的基礎。
一、激活設備管理器
使用MDM功能要先激活設備管理器
代碼如下:
/** * 激活設備管理權限 成功執行激活時,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黑白名單的各種黑操作之類的。
有問題歡迎留言討論
喜歡 就關注吧,歡迎投稿!
手機怎樣遠程控制電腦和手機?有時候,我們可能會有這種需求——需要通過自己的手機遠程操作控制電腦或手機,比方說,遠程協助指導家里老人操作手機;再比如,疫情嚴重居家隔離時,需要遠程操控公司電腦獲取工作資料...
2025.07.04以前,我們總能看到這樣的說話或者傳言,ios系統流暢、安全系數高,因為它是一個封閉性的移動操作系統,而安卓手機由于是開發性的移動操作系統,在安全上不如iPhone手機。那么,真的是這樣嗎? 其實,如...
2025.07.04iPhone手機和安卓手機到底應該怎么選擇,咱們來聊一聊,有任何想法可以評論區交流。咱們先說蘋果手機,蘋果手機有一大優點,兩大缺點。一大優點,就是咱們不得不否認,蘋果的IOS系統相對于安卓來說確實流暢...
2025.07.04現在的智能手機已經普及大眾,大部分人都有很多年使用手機的經驗,在這期間也換過不少手機,而在智能手機中,大致分為兩大陣營,一個是以安卓為操作系統的智能手機,通常國產手機都是安卓陣營,另一個是以iOS為操...
2025.07.04好多人都說有條件一定要買蘋果,因為蘋果的系統比安卓的好用。 說說我自己的感受吧!用蘋果也有一段時間了,最大的弊端就是他的信號跟電池。動不動能讓我崩潰,每天出門一定要檢查我的蘋果機有沒有電。每次回老家...
2025.07.04