首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 來電、短信、掛斷、接通廣播事件完整指南與權限配置

     編輯:程式設計綜合問答

核心廣播與監聽

事件廣播 Action / 監聽方式所需權限
來電鈴響TelephonyManager.ACTION_PHONE_STATE_CHANGED (隱式廣播)
或 PhoneStateListener 監聽 CALL_STATE_RINGING
READ_PHONE_STATE
來電接通PhoneStateListener 監聽 CALL_STATE_OFFHOOKREAD_PHONE_STATE
來電掛斷PhoneStateListener 監聽 CALL_STATE_IDLE (從 OFFHOOK 轉 IDLE 為掛斷)READ_PHONE_STATE
去電撥出Intent.ACTION_NEW_OUTGOING_CALL (有序廣播,可攔截修改號碼)PROCESS_OUTGOING_CALLS
短信接收Telephony.Sms.Intents.SMS_RECEIVED_ACTION ("android.provider.Telephony.SMS_RECEIVED")RECEIVE_SMS、READ_SMS
短信發送狀態SmsManager.sendTextMessage 的 sentIntent / deliveryIntentSEND_SMS

實現要點

1. 來電監聽 (Service + PhoneStateListener)

public class CallListener extends PhoneStateListener {
    @Override
    public void onCallStateChanged(int state, String number) {
        switch (state) {
            case TelephonyManager.CALL_STATE_RINGING:
                // 來電,number 為來電號碼,啟動閃光服務
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                // 接通
                break;
            case TelephonyManager.CALL_STATE_IDLE:
                // 掛斷/空閒
                break;
        }
    }
}
// 在 Service onCreate 中註冊
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
tm.listen(new CallListener(), PhoneStateListener.LISTEN_CALL_STATE);

2. 去電攔截 (BroadcastReceiver)

<receiver android:name=".OutgoingCallReceiver">
    <intent-filter android:priority="100">
        <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
    </intent-filter>
</receiver>
// onReceive 中 getResultData() 獲取號碼,setResultData(newNumber) 修改

3. 短信接收 (BroadcastReceiver, Android 4.4+ 需默認短信應用)

<receiver android:name=".SmsReceiver" android:exported="true" android:permission="android.permission.BROADCAST_SMS">
    <intent-filter android:priority="999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
// onReceive 解析 pdus 獲取 SmsMessage

權限聲明 (AndroidManifest.xml)

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />

版本適配提示

  • Android 6.0+ 運行時權限請求 (requestPermissions)。
  • Android 8.0+ 隱式廣播限制,ACTION_PHONE_STATE_CHANGED 需動態註冊或用 PhoneStateListener。
  • Android 10+ 後台啟動 Activity 限制,閃光服務需前台服務 (startForeground)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved