`

【android系统问题】呼叫状态变化

阅读更多
测试。做一个Receiver监听手机通话状态。发现这样个问题。
package com.duduli.call;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageStats;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;

public class CallComingReceiver extends BroadcastReceiver {
	
	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
//		System.out.println("a");
		tm.listen(MyPhoneState.getInstance(), PhoneStateListener.LISTEN_CALL_STATE);
//		System.out.println("b");
		
//		
//		Bundle b = intent.getExtras();
//		String phoneNr= b.getString("incoming_number");
//		if(phoneNr != null){
//			System.out.println(phoneNr);
//		}
//		System.out.println(tm.getLine1Number());
		
	}

	
	
}



package com.duduli.call;

import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;


public class MyPhoneState extends PhoneStateListener{
	private int last_state = TelephonyManager.CALL_STATE_IDLE;
	private MyPhoneState(){}
	private static MyPhoneState mps = null;
	public static MyPhoneState getInstance(){
		if(mps == null){
			mps = new MyPhoneState();
		}
		return mps;
	}
	
	@Override
	public void onCallStateChanged(int state, String incomingNumber) {
		// TODO Auto-generated method stub
//		super.onCallStateChanged(state, incomingNumber);
		
		
		switch (state) {
		case TelephonyManager.CALL_STATE_IDLE:
//			System.out.println("空闲时间");
//			System.out.println("CALL_STATE_IDLE");
			last_state = TelephonyManager.CALL_STATE_IDLE;
			break;
		case TelephonyManager.CALL_STATE_OFFHOOK:
//			System.out.println("CALL_STATE_OFFHOOK");
			break;
		case TelephonyManager.CALL_STATE_RINGING:
			if(last_state == TelephonyManager.CALL_STATE_IDLE){
				System.out.println("发送邮件0------?");
				last_state = TelephonyManager.CALL_STATE_RINGING;
			}
//			System.out.println("来电了");
//			System.out.println("CALL_STATE_RINGING");
			break;
		default:
			break;
		}
	}
	
}; 


不知怎么回事,我这边调试的结果,总会这样。
第一次呼入会出现一个“来电了”。
但是挂断之后就会出现两个“空闲时间”
再次呼入又会出现两个“来电了”
……以后的都是出现两次状态。
我都把实现都弄成了单例了还是出现问题,都不知道在哪里的问题。 

有没有大神给指点下。
分享到:
评论

相关推荐

    Android实现监听电话呼叫状态的方法

    在Android平台上,监听电话呼叫状态是一项重要的功能,它允许开发者获取到电话的实时状态,例如来电、通话中或挂断等。以下将详细介绍如何在Android应用中实现这一功能,包括必要的权限控制和电话状态监听。 首先,...

    android区分来电时呼叫转移软件

    Android系统提供了PhoneStateListener接口,允许应用程序监听手机的状态变化,如通话状态、信号强度等。通过注册这个监听器,开发者可以获取到电话拨打和接听的详细信息。 2. **Call State监听**: ...

    Android中监听电话状态.zip

    这个权限允许应用读取电话的状态,包括来电号码、呼叫状态等信息: ```xml <uses-permission android:name="android.permission.READ_PHONE_STATE" /> ``` 接下来,创建一个BroadcastReceiver(广播接收器)来接收...

    安卓端实现呼叫转移

    4. 监听电话状态:注册一个`BroadcastReceiver`,监听`ACTION_PHONE_STATE_CHANGED`广播,以在电话状态变化时作出反应。 5. 用户交互:提供UI界面供用户输入转移号码和选择转移类型。 在编写代码时,还需要注意处理...

    Android中监听电话状态.rar

    这个监听器提供了多种电话状态的回调方法,例如`onCallStateChanged()`,当我们想要监听电话状态变化时,就需要重写这个方法: ```java PhoneStateListener phoneStateListener = new PhoneStateListener() { @...

    安卓Android源码——android打电话源码.zip

    6. **Permission**: 打电话涉及到敏感的隐私和安全问题,因此Android系统对此进行了严格的权限控制。应用需要`<uses-permission android:name="android.permission.CALL_PHONE" />`权限才能直接拨打电话。 7. **...

    liblinphone-android-javadoc文档

    5. **事件处理** - 如何监听和响应liblinphone的各种事件,如网络状态变化、呼叫状态更改等。 6. **API接口** - Javadoc文档会详细介绍liblinphone的Java接口,包括方法签名、参数、返回值和异常,帮助开发者正确...

    SIP协议的IP电话呼叫过程 移动开发 - Android.zip

    4. 处理呼叫事件:监听SipAudioCall的状态变化,如振铃、接通、挂断等。 5. 结束会话:呼叫结束后,使用SipAudioCall的hangup()方法释放资源,同时通过SipManager的close()方法注销用户。 此外,Android应用还需要...

    android 系统中的几乎所有广播接收者

    BATTERY_CHANGED_ACTION 充电状态,或者电池的电量发生变化 "android.intent.action.BATTERY_CHANGED" BOOT_COMPLETED_ACTION 在系统启动后,这个动作被广播一次(只有一次) "android.intent.action.BOOT_COMPLETED" ...

    android电话状态

    在Android系统中,电话状态是通信模块的重要组成部分,它涵盖了从通话建立到结束的整个过程。以下是关于Android电话状态的详细解析: 1. 通话状态(Call State) Android提供了通话状态枚举类,用于表示电话的不同...

    linphone-android最新sdk

    5. **事件处理**: linphone-sdk提供了一系列的回调接口,用于处理注册状态改变、呼叫状态改变、网络质量变化等事件。 6. **自定义界面**: 开发者可以根据需求定制通话界面,显示联系人信息、通话状态、控制按钮等。...

    Android-Fall-Detection一款基于Android手机的老人跌倒检测系统

    《Android手机上的老人跌倒检测系统详解》 随着科技的发展,智能设备在老年人关爱领域扮演着越来越重要的角色。本文将详细介绍一款名为“Android-Fall-Detection”的应用,它是一款专为老人设计的跌倒检测系统,...

    Android call/calllog 详细流程图

    这些状态变化会通过电话服务组件通知到系统的CallLog服务,CallLog服务会负责将这些状态记录到数据库中,形成通话记录。通话记录通常包括以下信息:通话时间、通话类型(呼入、呼出、未接)、对方号码、通话时长等。...

    基于32单片机的无线病床呼叫系统设计

    - **LED指示模块**:通过灯光的变化(灭→亮→灭)显示当前病床的呼叫状态。 ##### 2. 接收端 - **Android APP**:作为监控平台,实时显示来自发射端的呼叫信息,并通过手机铃声提醒医护人员。医护人员可以通过APP...

    android phone电话流程

    为保护用户隐私,Android系统限制了对电话状态的访问,只有特定的系统应用和服务才能获取详细通话记录。 10. **API接口**: 开发者可以使用`TelephonyManager`和`PhoneStateListener`等API来获取电话状态信息,...

    Android_Phone框架介绍(以GsmPhone为例

    Android Phone 框架是 Android 系统中负责处理电话功能的关键组件之一,包括但不限于电话呼叫管理、短信处理以及网络连接状态监测等功能。本文将从以下几个方面进行阐述: 1. **Phone App 的启动机制** 2. **...

    《深入理解Android:Telephony原理剖析与最佳实践》迷你书

    3. **电话状态监听**:讲解如何通过BroadcastReceiver监听电话状态变化,包括来电、去电、通话中等状态。 4. **短信服务**:阐述SMS Manager的使用,如何发送和接收短信,以及如何处理彩信。 5. **网络选择与切换*...

    android_pjsip_android_

    4. **事件监听**:为了处理来电、呼叫状态变化等事件,需要设置回调函数。例如,你可以监听注册成功、失败,呼叫建立、挂断等事件。 5. **拨打电话**:使用PJSIP API发起SIP呼叫,传递对方的SIP地址作为参数。 6. ...

    Android 5.0拨号盘 Dialer源码

    6. **BroadcastReceiver**:Dialer使用BroadcastReceiver监听系统广播事件,例如来电和通话状态变化。例如,`com.android.dialer.callintent.CallIntentReceiver`响应来电和挂断事件。 在源码中,拨号盘的实现主要...

Global site tag (gtag.js) - Google Analytics