国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android中監(jiān)聽未接來電的2種方法

2020-04-11 11:36:02
字體:
供稿:網(wǎng)友

這里主要是總結(jié)一下如何監(jiān)聽有未接來電的問題
 
1.1 使用廣播接收器 BrocastReceiver
實(shí)現(xiàn)思路 :
靜態(tài)注冊監(jiān)聽android.intent.action.PHONE_STATE 的廣播接收器 當(dāng)手機(jī)的狀態(tài)改變后將會(huì)觸發(fā) onReceive.
手機(jī)的狀態(tài)分為CALL_STATE_RINGING(響鈴中),CALL_STATE_IDLE(空閑),CALL_STATE_OFFHOOK(忙音).
也就是說當(dāng)你沒有任何電話是,狀態(tài)是 IDLE ,當(dāng)接到電話時(shí)是 OFFHOOK ,電話結(jié)束后返回 IDLE 狀態(tài)。
記錄上一次的手機(jī)狀態(tài),如果的手機(jī)現(xiàn)在的空閑,上次的狀態(tài)響鈴中的話,就可以判斷是未接來電.

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <receiver android:name="com.example.phonestatedemo.receiver.PhoneStateReceiver">    <intent-filter >       <action android:name="android.intent.action.PHONE_STATE"/>    </intent-filter>  </receiver> 

 

import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.TelephonyManager; import android.util.Log; import android.widget.Toast;  public class PhoneStateReceiver extends BroadcastReceiver {    private static int lastCallState = TelephonyManager.CALL_STATE_IDLE;      @Override   public void onReceive(Context arg0, Intent arg1) {     String action = arg1.getAction();     Log.d("PhoneStateReceiver", action );     TelephonyManager telephonyManager = (TelephonyManager) arg0         .getSystemService(Context.TELEPHONY_SERVICE);     int currentCallState = telephonyManager.getCallState();     Log.d("PhoneStateReceiver", "currentCallState=" + currentCallState );     if (currentCallState == TelephonyManager.CALL_STATE_IDLE) {// 空閑       //TODO      } else if (currentCallState == TelephonyManager.CALL_STATE_RINGING) {// 響鈴       //TODO      } else if (currentCallState == TelephonyManager.CALL_STATE_OFFHOOK) {// 接聽       //TODO      }     if(lastCallState == TelephonyManager.CALL_STATE_RINGING &&            currentCallState == TelephonyManager.CALL_STATE_IDLE){       Toast.makeText(arg0, "有未接來電", 1).show();     }          lastCallState = currentCallState;    }  }  

1.2  使用 PhoneStateListener
實(shí)現(xiàn)思路 :
繼承PhoneStateListener后,當(dāng)手機(jī)的狀態(tài)改變后將會(huì)觸發(fā)onCallStateChanged.手機(jī)的狀態(tài)分為CALL_STATE_RINGING(響鈴中),CALL_STATE_IDLE(空閑),CALL_STATE_OFFHOOK(忙音).
也就是說當(dāng)你沒有任何電話是,狀態(tài)是 IDLE ,當(dāng)接到電話時(shí)是 OFFHOOK ,電話結(jié)束后返回 IDLE 狀態(tài)。
記錄上一次的手機(jī)狀態(tài),如果的手機(jī)現(xiàn)在的空閑,上次的狀態(tài)響鈴中的話,就可以判斷是未接來電.
 
不足:現(xiàn)在的處理不能判斷出是用戶是否主動(dòng)不接電話.

TelephonyManager telephonyManager = (TelephonyManager) this         .getSystemService(Context.TELEPHONY_SERVICE);     telephonyManager.listen(new CallStateListener(this),         PhoneStateListener.LISTEN_CALL_STATE);  package com.example.phonestatedemo.listener;  import android.content.Context; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; import android.widget.Toast;  public class CallStateListener extends PhoneStateListener {   private static int lastetState = TelephonyManager.CALL_STATE_IDLE; // 最后的狀態(tài)   private Context context;    public CallStateListener(Context context) {     this.context = context;    }    @Override   public void onCallStateChanged(int state, String incomingNumber) {     // TODO Auto-generated method stub     super.onCallStateChanged(state, incomingNumber);     Log.d("CallStateListener", "onCallStateChanged state=" + state );     // 如果當(dāng)前狀態(tài)為空閑,上次狀態(tài)為響鈴中的話,則破觚為認(rèn)為是未接來電     if (lastetState == TelephonyManager.CALL_STATE_RINGING         && state == TelephonyManager.CALL_STATE_IDLE) {       //TODO       Toast.makeText(this.context, "CallStateListener 有未接來電", 1).show();     }      lastetState = state;    }  } 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大姚县| 湘乡市| 韶关市| 汉源县| 红安县| 沧州市| 措勤县| 广宗县| 桦川县| 涪陵区| 仁寿县| 博爱县| 古丈县| 桃园市| 隆昌县| 措勤县| 科尔| 宣化县| 寻甸| 崇义县| 曲松县| 凉山| 客服| 青阳县| 秦安县| 凭祥市| 虎林市| 固镇县| 普陀区| 无极县| 太原市| 荣成市| 长岛县| 曲阜市| 林芝县| 扎兰屯市| 嘉义县| 方山县| 陇西县| 紫阳县| 商河县|