• Android 監聽手機來電和去電

    0
    Android Java C/C++ Go ico 12265 次瀏覽
    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>  

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色