最近项目要做一个能捕获到来电事件,取得电话号码的应用.在网上查了二天,算是运行成功了.在这里分享一下经验:)
通过之前对Android 的学习,认为来电话时应该是通过广播(broadcast)通知给应用的.所以就在Reference里找,知道Broadcast Action应该在
anroid.content.Intent类里找.找了找Standard Broadcast Action,竟然没有...但觉得ACTION_ANSWER比较像,
(Activity Action: Handle an incoming phone call.)但又是Activity Action.BroadCast的Filter应该是用不了的. 找了半天,感觉这条路比较难达到目的,就去Google了.非常郁闷的是,很多搜索结果的网站都让中国给屏闭了,很多都打不开.
不过总算也找到了一些零碎的代码, 试着去运行,但在Console里一直没有输出日志,那会以为是代码问题,解决了半天,最后才恍然大悟,日志应该在LogCat里看,才发现代码是好的.不知道什么时候我把Logcat视图给关了,之后就忘了这事了.还要注意的是,权限一定要在Manifest文件中设置(<uses-permission android:name="android.permission.READ_PHONE_STATE" />)
运行代码,成功!!在LogCat里也输出了电话号码.但看代码有很多迷惑的地方,比如说Manifest文件里intent-filter的action:android.intent.action.PHONE_STATE这是哪来的?我在官方的Reference里没有搜到!!后面在以前的Reference里找到有,难道2.1把它不推荐使用了?在2.1的Reference里,一点它的身影都没有.
后面想看看官方自带的Phone应用在这里是怎么写的,去官方下载了Phone App应用 的源代码
git clone git://android.git.kernel.org/platform/packages/apps/Phone.git
但奇怪的是也搜不到android.intent.action.PHONE_STATE这个字符串,说明不是用的这种方式.
静下心来看了看Phone的源代码,有点失望,没看明白是怎么捕获到的.还用了很多内部的类,这些类都SDK中都没有暴露出来,去Google了一下,还有人和我一样的疑问,不知道怎样使用这些内部的类.估计官方不想我们这么去用.但应该怎么用呢?
下面这些代码在2.1上是可以运行的.但觉得不是2.1推荐的方式,因为android.intent.action.PHONE_STATE在2.1Reference里找不到....
public class CustomBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "CustomBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "WE ARE INSIDE!!!!!!!!!!!");
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener();
telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
Bundle bundle = intent.getExtras();
String phoneNr= bundle.getString("incoming_number");
Log.i(TAG, "phoneNr: "+phoneNr);
}
}
public class CustomPhoneStateListener extends PhoneStateListener {
private static final String TAG = "CustomPhoneStateListener";
@Override
public void onCallStateChanged(int state, String incomingNumber){
Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!");
Log.v(TAG, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_RINGING:
Log.d(TAG, "RINGING");
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.d(TAG, "IDLE");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d(TAG, "OFFHOOK");
break;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xjgz"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".CustomBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-sdk android:minSdkVersion="7" />
</manifest>
分享到:
相关推荐
在Android系统中,获取来电和去电号码是开发者经常需要处理的任务,这主要涉及到电话管理和广播接收器的相关知识。下面将详细阐述如何实现这一功能。 首先,我们需要了解Android的权限管理。由于涉及到用户隐私,...
在Android开发中,"来电获取来电号码"是一个常见的需求,主要涉及到电话管理和广播接收器(BroadcastReceiver)的应用。本文将详细讲解如何实现这个功能,包括获取来电、未接来电的号码以及设置黑名单。 首先,我们...
【Android开发应用源码-来电秀实现.zip】这个压缩包文件是针对Android平台的一个来电秀应用的源码,主要用于帮助开发者学习如何在Android系统中实现个性化的来电显示功能。源码参考的价值在于它提供了实际的代码实现...
在Android平台上,获取手机号码归属地是一项常见的需求,特别是在开发涉及通信或用户验证的应用时。本文将详细讲解如何实现这一功能。 首先,我们要明白手机号码的归属地信息通常包括运营商(如中国移动、中国联通...
在Android开发中,"手机卫士"这类应用通常涉及到设备管理、安全防护和性能优化等多个方面。本项目实战聚焦于获取手机联系人这一功能,这在很多安全应用中是必要的,比如备份联系人、识别垃圾来电或者防止隐私泄露。...
本文将详细介绍一些关键的Android开发技巧。 1. 入门实例剖析 Android 应用程序的起点通常是一个Activity,它是用户界面的主要构建块。在AndroidManifest.xml文件中,我们通过配置`<intent-filter>`来指定程序的...
在Android项目实战中,开发一款手机卫士应用是常见的任务,而实现手机号码归属地查询功能是其中的关键部分。这个功能能够帮助用户识别来电号码的来源,提高对未知来电的安全防范意识。本项目中,我们将深入探讨手机...
这个功能通常用于帮助用户识别来电号码的来源,从而提高对未知来电的安全判断。以下是该功能实现涉及的关键知识点及详细解释: 1. **Android Studio**:作为开发平台,Android Studio 提供了集成开发环境(IDE),...
#### 四、JAIN SIP Stack for Android的获取与集成 - **下载**: - 官方网站:[Telestax博客](https://telestax.com/blog/jain-sip-stack-for-android/) - 下载地址:[Mobicents CI CloudBees]...
该设计旨在帮助学生掌握Android开发的基础知识和实践技能,包括环境配置、应用开发流程、功能设计以及安全保护机制。 1. **课程设计目的** - 安装和配置Android编程环境,了解开发工具的使用。 - 学习和熟悉...
在Android开发中,监听来电和去电是许多应用程序的核心功能之一,尤其是在通讯应用、日志记录或企业级安全软件中。根据给定的文件信息,我们可以深入探讨如何在Android中实现这一功能,包括必要的权限设置、广播接收...
`TelephonyManager`类是与电话相关的API接口,我们可以用它来获取来电号码和通话状态。当电话状态变为" ringing"(振铃)时,我们的广播接收器会被触发,这时可以开始获取归属地信息。 2. **归属地查询**:获取到...
**SDK下载链接**:对于开发者来说,访问提供的链接(http://pan.baidu.com/s/1i39WkxZ)可以获取Android 2.2至4.4的SDK包,包含各种版本的API工具、系统映像以及模拟器等资源,方便进行跨版本的开发和测试。...
以上是对"Android来电防火墙源码"所涉及的关键技术点的分析,这些知识点涵盖了Android应用开发中的核心要素,包括系统兼容性、权限管理、事件监听、数据库操作和用户界面设计等。通过深入理解和改进这些部分,可以...
完成此课程设计,学生不仅可以掌握Android开发的基本技能,还可以深入了解Android的系统架构和多媒体处理机制,提升实际问题解决能力。同时,通过设计和实现用户友好的界面,对UI/UX设计也会有更深入的理解。
当接收到通话状态改变的广播时,可以获取来电号码,然后查询SQLite数据库匹配姓名。匹配成功后,可以显示自定义的来电提示界面,展示来电者的姓名。 5. 搜索功能实现:在搜索框中输入关键词时,需要实时更新显示的...
在Android开发中,来电弹屏功能通常用于应用的个性化通知或者特定场景的提醒,比如来电显示、消息提醒等。这个"Android代码-来电弹屏实例代码带关闭按钮.rar"压缩包提供了一个实现此类功能的示例项目。接下来,我们...
- BroadcastReceiver:利用BroadcastReceiver监听来电广播,当有电话打入时,触发监听器并获取来电号码。 - 拨号器权限:需要申请READ_PHONE_STATE权限,以访问来电信息。 - 自定义来电显示:根据获取到的来电...
这个项目是为学习Android开发的学生或开发者准备的,旨在帮助他们理解和实践Android应用的基本构建块,特别是与媒体播放相关的功能。以下是关于这个音乐播放器应用的一些关键知识点: 1. **Android SDK**: 音乐...