当前位置: 首页 > 编程笔记 >

Android中监听未接来电的2种方法

井洲
2023-03-14
本文向大家介绍Android中监听未接来电的2种方法,包括了Android中监听未接来电的2种方法的使用技巧和注意事项,需要的朋友参考一下

这里主要是总结一下如何监听有未接来电的问题
 
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; 
 
  } 
 
} 
 类似资料:
  • 本文向大家介绍Android监听来电和去电的实现方法,包括了Android监听来电和去电的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android监听来电和去电的实现方法。分享给大家供大家参考,具体如下: 要监听android打电话和接电话,只需下面2步骤 第一步,写一个Receiver继承自BroadcastReceiver 第二步:在AndroidManifest.xml

  • 本文向大家介绍Android中监听Home键的4种方法总结,包括了Android中监听Home键的4种方法总结的使用技巧和注意事项,需要的朋友参考一下 昨天需要处理一个问题,需要监听home键。最开始想到使用onKeydonwn这个方法。但是发现home不能这样处理,onKeydonwn可以处理菜单键和back键,但home不能。因为home键是系统键,情况特殊一些。 看了一下网上的资料,说下面的

  • 我测试了这个帖子的答案,但它也不起作用:在Android6.0中接听来电 IncomingActivity:

  • 本文向大家介绍Android 解决监听home键的几种方法,包括了Android 解决监听home键的几种方法的使用技巧和注意事项,需要的朋友参考一下 Android 解决监听home键的几种方法 前言: 以下两种方法可以完美解决监听back键,home键,多任务键(最近任务键)。 一、使用注册广播监听home键、多任务键 演示图 创建一个广播代码如下: 在Activity中的onCreate()

  • 到现在为止,我们已经使用了辅助函数 takeEvery 在每个 action 来到时派生一个新的任务。 这多少有些模仿 redux-thunk 的行为:举个例子,每次一个组件调用 fetchProducts Action 创建器(Action Creator),Action 创建器就会发起一个 thunk 来执行控制流。 在现实情况中,takeEvery 只是一个在强大的低阶 API 之上构建的辅

  • 问题内容: 当我尝试为来电创建自定义屏幕时,我试图以编程方式接听来电。我正在使用以下代码,但在Android 5.0中不起作用。 问题答案: 使用Android 8.0 Oreo更新 尽管最初要求提供Android L支持是一个问题,但似乎仍然有人在质疑这个问题和答案,因此值得描述Android 8.0 Oreo中引入的改进。向后兼容方法仍在下面描述。 发生了什么变化? 从Android 8.0