测试。做一个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系统提供了PhoneStateListener接口,允许应用程序监听手机的状态变化,如通话状态、信号强度等。通过注册这个监听器,开发者可以获取到电话拨打和接听的详细信息。 2. **Call State监听**: ...
4. 监听电话状态:注册一个`BroadcastReceiver`,监听`ACTION_PHONE_STATE_CHANGED`广播,以在电话状态变化时作出反应。 5. 用户交互:提供UI界面供用户输入转移号码和选择转移类型。 在编写代码时,还需要注意处理...
这个权限允许应用读取电话的状态,包括来电号码、呼叫状态等信息: ```xml <uses-permission android:name="android.permission.READ_PHONE_STATE" /> ``` 接下来,创建一个BroadcastReceiver(广播接收器)来接收...
这个监听器提供了多种电话状态的回调方法,例如`onCallStateChanged()`,当我们想要监听电话状态变化时,就需要重写这个方法: ```java PhoneStateListener phoneStateListener = new PhoneStateListener() { @...
6. **Permission**: 打电话涉及到敏感的隐私和安全问题,因此Android系统对此进行了严格的权限控制。应用需要`<uses-permission android:name="android.permission.CALL_PHONE" />`权限才能直接拨打电话。 7. **...
5. **事件处理** - 如何监听和响应liblinphone的各种事件,如网络状态变化、呼叫状态更改等。 6. **API接口** - Javadoc文档会详细介绍liblinphone的Java接口,包括方法签名、参数、返回值和异常,帮助开发者正确...
4. 处理呼叫事件:监听SipAudioCall的状态变化,如振铃、接通、挂断等。 5. 结束会话:呼叫结束后,使用SipAudioCall的hangup()方法释放资源,同时通过SipManager的close()方法注销用户。 此外,Android应用还需要...
BATTERY_CHANGED_ACTION 充电状态,或者电池的电量发生变化 "android.intent.action.BATTERY_CHANGED" BOOT_COMPLETED_ACTION 在系统启动后,这个动作被广播一次(只有一次) "android.intent.action.BOOT_COMPLETED" ...
在Android系统中,电话状态是通信模块的重要组成部分,它涵盖了从通话建立到结束的整个过程。以下是关于Android电话状态的详细解析: 1. 通话状态(Call State) Android提供了通话状态枚举类,用于表示电话的不同...
5. **事件处理**: linphone-sdk提供了一系列的回调接口,用于处理注册状态改变、呼叫状态改变、网络质量变化等事件。 6. **自定义界面**: 开发者可以根据需求定制通话界面,显示联系人信息、通话状态、控制按钮等。...
这些状态变化会通过电话服务组件通知到系统的CallLog服务,CallLog服务会负责将这些状态记录到数据库中,形成通话记录。通话记录通常包括以下信息:通话时间、通话类型(呼入、呼出、未接)、对方号码、通话时长等。...
《Android手机上的老人跌倒检测系统详解》 随着科技的发展,智能设备在老年人关爱领域扮演着越来越重要的角色。本文将详细介绍一款名为“Android-Fall-Detection”的应用,它是一款专为老人设计的跌倒检测系统,...
- **LED指示模块**:通过灯光的变化(灭→亮→灭)显示当前病床的呼叫状态。 ##### 2. 接收端 - **Android APP**:作为监控平台,实时显示来自发射端的呼叫信息,并通过手机铃声提醒医护人员。医护人员可以通过APP...
为保护用户隐私,Android系统限制了对电话状态的访问,只有特定的系统应用和服务才能获取详细通话记录。 10. **API接口**: 开发者可以使用`TelephonyManager`和`PhoneStateListener`等API来获取电话状态信息,...
Android Phone 框架是 Android 系统中负责处理电话功能的关键组件之一,包括但不限于电话呼叫管理、短信处理以及网络连接状态监测等功能。本文将从以下几个方面进行阐述: 1. **Phone App 的启动机制** 2. **...
3. **电话状态监听**:讲解如何通过BroadcastReceiver监听电话状态变化,包括来电、去电、通话中等状态。 4. **短信服务**:阐述SMS Manager的使用,如何发送和接收短信,以及如何处理彩信。 5. **网络选择与切换*...
4. **事件监听**:为了处理来电、呼叫状态变化等事件,需要设置回调函数。例如,你可以监听注册成功、失败,呼叫建立、挂断等事件。 5. **拨打电话**:使用PJSIP API发起SIP呼叫,传递对方的SIP地址作为参数。 6. ...
Android 系统广播大全 Intent 跳转界面 Android 系统广播大全 Intent 跳转界面是一种机制,允许应用程序之间进行交互和通信。Intent 是 Android 中的一种机制,可以将动作和数据封装起来,用于启动 Activity、服务...