a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > Android > 正文

Android中監聽未接來電的2種方法

2020-04-11 11:36:02
字體:
來源:轉載
供稿:網友

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

<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
實現思路 :
繼承PhoneStateListener后,當手機的狀態改變后將會觸發onCallStateChanged.手機的狀態分為CALL_STATE_RINGING(響鈴中),CALL_STATE_IDLE(空閑),CALL_STATE_OFFHOOK(忙音).
也就是說當你沒有任何電話是,狀態是 IDLE ,當接到電話時是 OFFHOOK ,電話結束后返回 IDLE 狀態。
記錄上一次的手機狀態,如果的手機現在的空閑,上次的狀態響鈴中的話,就可以判斷是未接來電.
 
不足:現在的處理不能判斷出是用戶是否主動不接電話.

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; // 最后的狀態   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 );     // 如果當前狀態為空閑,上次狀態為響鈴中的話,則破觚為認為是未接來電     if (lastetState == TelephonyManager.CALL_STATE_RINGING         && state == TelephonyManager.CALL_STATE_IDLE) {       //TODO       Toast.makeText(this.context, "CallStateListener 有未接來電", 1).show();     }      lastetState = state;    }  } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天堂精品一区二区三区 | 欧美午夜理伦三级在线观看 | 亚洲一区久久久 | 欧美黄色大片网站 | 欧洲在线一区 | 日本免费一二区 | 免费一区在线 | 成人h动漫精品一区二区器材 | 日韩精品一区二区三区在线播放 | 亚洲精品久久久久久久久久久久久 | h免费在线| 久久精品国产99国产 | 色欧美视频 | 色屁屁草草影院ccyycom | 一区二区三区四区av | 久久国产视频网站 | 色婷婷国产精品久久包臀 | 中文字幕免费视频观看 | 亚洲精品综合在线 | 一区二区日韩视频 | 精品一区二区三区在线观看 | 国产一区二区视频在线观看 | 久久激情综合 | 日韩视频精品 | 日韩成人影院 | 欧美视频在线免费 | 漂亮少妇videoshd忠贞 | 午夜日韩视频 | 国产精品一区二区三区四区 | 国产日韩欧美一区 | 色约约精品免费看视频 | 中文字幕久久精品 | 成年人免费在线视频 | 午夜精品一区二区三区在线视频 | 亚洲激情一区二区 | 91精品视频国产 | 日韩毛片免费在线观看 | 亚洲视频一 | 91精品国产色综合久久不卡98 | 亚洲欧美一区二区精品中文字幕 | 男女啪啪免费网站 |