国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 江西省| 大庆市| 余庆县| 贺兰县| 肇东市| 利津县| 栾川县| 丽江市| 江华| 沿河| 资兴市| 武鸣县| 大渡口区| 怀化市| 建德市| 榆树市| 教育| 阆中市| 颍上县| 台南县| 金阳县| 即墨市| 香港 | 临沧市| 左权县| 沈阳市| 乐亭县| 湛江市| 大兴区| 太和县| 佛山市| 哈尔滨市| 永丰县| 蒙阴县| 康马县| 沈阳市| 扎囊县| 万州区| 嘉黎县| 浦县| 齐河县|