Android 監聽手機來電和去電

jopen 10年前發布 | 18K 次閱讀 Android Android開發 移動開發

1、繼承BroadcastReceiver,監聽來去電狀態

 

    package com.example.callphonetest.receiver;  

    import android.app.Service;  
    import android.content.BroadcastReceiver;  
    import android.content.Context;  
    import android.content.Intent;  
    import android.telephony.TelephonyManager;  
    import android.util.Log;  

    public class PhoneStatReceiver extends BroadcastReceiver {  

        private static final String TAG = PhoneStatReceiver.class.getSimpleName();  

        private static boolean incomingFlag = false;  

        private static String incoming_number = null;  

        @Override  
        public void onReceive(Context context, Intent intent) {  
            // 如果是撥打電話  
            if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {  
                incomingFlag = false;  
                String phoneNumber = intent  
                        .getStringExtra(Intent.EXTRA_PHONE_NUMBER);  
                Log.e(TAG, "call out:" + phoneNumber);  
            } else {  
                // 如果是來電  
                TelephonyManager tm = (TelephonyManager) context  
                        .getSystemService(Service.TELEPHONY_SERVICE);  

                switch (tm.getCallState()) {  
                case TelephonyManager.CALL_STATE_RINGING:  
                    incomingFlag = true;// 標識當前是來電  
                    incoming_number = intent.getStringExtra("incoming_number");  
                    Log.e(TAG, "call in ringing :" + incoming_number);  
                    break;  
                case TelephonyManager.CALL_STATE_OFFHOOK:  
                    if (incomingFlag) {  
                        Log.e(TAG, "call in offhook :" + incoming_number);  
                    }  
                    break;  

                case TelephonyManager.CALL_STATE_IDLE:  
                    if (incomingFlag) {  
                        Log.e(TAG, "call in idle :"+incoming_number);  
                    }  
                    break;  
                }  
            }  
        }  
    }  


 

 

2、注冊監聽廣播并注冊相應權限

    <?xml version="1.0" encoding="utf-8"?>  
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
        package="com.example.callphonetest"  
        android:versionCode="1"  
        android:versionName="1.0" >  

        <uses-sdk  
            android:minSdkVersion="8"  
            android:targetSdkVersion="8" />  

        <!-- 監聽電話狀態權限 -->  
        <uses-permission android:name="android.permission.READ_PHONE_STATE" >  
        </uses-permission>  
        <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" >  
        </uses-permission>  

        <application  
            android:allowBackup="true"  
            android:icon="@drawable/ic_launcher"  
            android:label="@string/app_name"  
            android:theme="@style/AppTheme" >  
            <activity  
                android:name="com.example.callphonetest.MainActivity"  
                android:label="@string/app_name" >  
                <intent-filter>  
                    <action android:name="android.intent.action.MAIN" />  

                    <category android:name="android.intent.category.LAUNCHER" />  
                </intent-filter>  
            </activity>  

            <!-- 注冊監聽廣播 -->  
            <receiver android:name=".receiver.PhoneStatReceiver" >  
                <intent-filter>  
                    <action android:name="android.intent.action.PHONE_STATE" />  
                    <action android:name="android.intent.action.NEW_OUTGOING_CALL" />  
                </intent-filter>  
            </receiver>  
        </application>  

    </manifest>  
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!