Android 4.4 (API 19) 起,系統引入 **預設短信應用** 機制。非預設短信應用呼叫 `SmsManager.sendTextMessage()` 時,系統會彈出**系統級確認對話框** (非殺毒軟體專屬),提示「允許此應用發送短信?」。用戶點擊「允許」後,該應用在一段時間內獲得豁免。第三方安全軟體 (360、騰訊管家等) 可能額外攔截並彈出自己的提示框。
| 方案 | 適用場景 | 實作要點 |
|---|---|---|
| 引導用戶設為預設短信應用 | 核心功能為通訊/驗證碼發送的 App | Telephony.Sms.getDefaultSmsPackage() 判斷 → 非預設時 `startActivity(new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT))` 彈出系統設定頁 |
| 使用系統預設短信應用發送 (隱式 Intent) | 非核心通訊功能,僅需觸發發送 | Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + phone)); intent.putExtra("sms_body", text); startActivity(intent); 唚喚系統編輯器,用戶確認發送,無需權限 |
| 申請 `SEND_SMS` 權限 + 用戶授權 | Android 6.0+ 動態權限請求 | 清單宣告權限 → 運行時 `requestPermissions` → 用戶允許後調用 `SmsManager`,仍可能觸發系統確認對話框 |
| 驗證碼場景:改用 SMS Retriever API / One-time Code API | 自動填充驗證碼,無需發送權限 | Google Play Services 提供,應用僅接收特定格式短信,體驗最佳 |
「這個比較難了,你卸載殺毒軟體吧,要麼你的代碼把殺毒軟體幹掉」
此回答**極不專業、違反安全準則**。卸載用戶安全軟體或對抗安全軟體屬惡意行為,**絕不可採納**。正確做法是尊重權限模型,選擇上述合規方案之一。
尊重用戶隱私與系統安全模型,才是 Android 開發者的長久之道。