添加权限
<uses-permission
android:name="android.permission.READ_PHONE_STATE" />
private TextView myTextView1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.phone_state);
myTextView1 = (TextView) findViewById(R.id.myTextView1);
/* 新增的PhoneStateListener */
MyPhoneCallListener myPhoneCallListener = new MyPhoneCallListener();
/* 取得电话服务 */
TelephonyManager tm = (TelephonyManager) this
.getSystemService(Context.TELEPHONY_SERVICE);
/* 注册Listener */
tm.listen(myPhoneCallListener, PhoneStateListener.LISTEN_CALL_STATE);
}
/* 内部class继承PhoneStateListener */
public class MyPhoneCallListener extends PhoneStateListener {
/* 重写onCallStateChanged当状态改变时改变myTextView1的文字及颜色 */
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
/* 无任务状态时 */
case TelephonyManager.CALL_STATE_IDLE:
myTextView1.setTextColor(Color.RED);
myTextView1.setText("无任何状态");
break;
/* 接起电话时 */
case TelephonyManager.CALL_STATE_OFFHOOK:
myTextView1.setTextColor(Color.BLUE);
myTextView1.setText("接起电话时");
break;
/* 电话进来时 */
case TelephonyManager.CALL_STATE_RINGING:
getContactPeople(incomingNumber);
break;
default:
break;
}
super.onCallStateChanged(state, incomingNumber);
}
}
private void getContactPeople(String incomingNumber) {
myTextView1.setTextColor(Color.BLUE);
ContentResolver contentResolver = getContentResolver();
Cursor cursor = null;
/* cursor里要放的字段名称 */
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER };
/* 用来电电话号码查找该联系人 */
cursor = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection,
ContactsContract.CommonDataKinds.Phone.NUMBER + "=?",
new String[] { incomingNumber }, "");
/* 找不到联系人 */
if (cursor.getCount() == 0) {
myTextView1.setText("未知联系人:" + incomingNumber);
} else if (cursor.getCount() > 0) {
cursor.moveToFirst();
/* projection这个数组里 */
String name = cursor.getString(1);
myTextView1.setText(name + ":" + incomingNumber);
}
}
- 大小: 11.8 KB
分享到:
相关推荐
在Android系统中,电话拨号器是系统服务的一部分,由电信框架提供支持,通常与联系人应用紧密集成。这篇文章将深入探讨电话拨号器的工作原理、涉及的核心组件以及如何进行定制开发。 首先,我们要理解Android的电话...
1. **用户界面设计**:电话拨号器的界面通常包含数字键盘、联系人列表、通话记录等功能模块。数字键盘用于输入电话号码,其设计需考虑易用性和响应速度;联系人列表则提供快速拨号功能,将常用联系人展示出来,可能...
5. 联系人集成:拨号器通常会集成到系统联系人应用,以便用户可以快速拨号。这涉及到`ContentProvider`和`CursorLoader`的使用,以读取联系人数据。 6. 事件监听和回调:例如,监听电话状态改变的`...
8. **权限**:拨号器需要`READ_PHONE_STATE`权限来查看当前的电话状态,以及`CALL_PHONE`权限来拨打电话。这些需要在AndroidManifest.xml中明确声明。 9. **Intent**:Android应用之间通过Intent进行通信。拨号器...
6. **源码分析**:通过分析Android系统自带拨号器的源码,可以学习到更高级的功能实现,如联系人集成、来电显示、通话记录等。 7. **自定义动画和过渡效果**:为了提升用户体验,拨号器可能会添加按键按下效果、...
在Android平台上,电话拨号器是系统的核心组件之一,它允许用户通过图形用户界面拨打、接听电话以及管理联系人。本项目"android电话拨号器"着重于开发一个功能完善的模拟电话拨号应用,能够支持在多设备环境中进行...
1. UI设计:通常使用Android的布局组件(如LinearLayout, RelativeLayout)构建拨号键盘和联系人列表界面。通过EditText接收用户输入的电话号码,并提供拨号按钮触发拨号操作。 2. 拨号权限:应用需要在...
添加`<uses-permission android:name="android.permission.READ_CONTACTS" />`确保应用有权限读取联系人信息。 5. **Intent与BroadcastReceiver**:当用户点击快捷拨号条目时,创建一个Intent,指定ACTION_CALL ...
在Android系统中,"遮挡系统拨号界面"通常指的是创建一个悬浮窗口或者顶级窗口(Top Window),使其能够在用户进行拨号操作时显示在系统拨号界面之上,类似360来电显示那样显示一些自定义信息,比如联系人头像、姓名...
拨号器模块实现了用户界面与电话服务的交互,包括数字键盘的逻辑、拨号操作的执行以及联系人检索功能。通过源码,我们可以学习到UI事件如何转化为电话请求,并了解如何处理呼叫状态的变化。 4. **通话管理(Call ...
在拨打电话时,你可以创建一个Intent,指定动作(ACTION_DIAL或ACTION_CALL)来启动电话拨号器或直接拨打电话。例如: ```java Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:" +...
开发者需要注册广播接收器监听电话状态变化(例如`PhoneStateListener`),当有来电时,获取来电号码,然后通过ContentResolver查询与之关联的联系人信息,将姓名展示在来电界面上。 4. **用户界面设计**:良好的...
6. **数据存储**:如果拨号盘有联系人功能,可能会涉及到SQLite数据库或SharedPreferences来存储联系人信息。SQLite用于结构化的数据存储,而SharedPreferences适合保存小量配置数据。 7. **Intent与IntentFilter**...
Android权限系统允许应用程序请求访问设备的某些功能或数据,如位置信息、联系人列表、照片、录音等。以下是Android权限设置大全的详细介绍: 位置信息权限 * android.permission.ACCESS_CHECKIN_PROPERTIES:访问...
在Android平台上实现监听系统来电并弹出提示窗口的功能,涉及到多个方面的知识点。...这些内容共同构成了一个完整的功能实现,可以用于提升应用的用户体验,比如在来电时显示联系人详细信息、来电号码归属地信息等。
- **ContactProvider**:联系人信息的提供者,对接SQLite数据库,实现了ContentProvider接口,使得其他应用可以通过ContentResolver查询或修改联系人信息。 - **DialtactsActivity**:主界面,展示了联系人列表,...
2. **Activity**:主活动(MainActivity)可能会有一个用户界面,用于拨打电话、查看通话记录或管理联系人。这通常涉及到使用`Intent`来启动拨号器或者直接拨打电话,以及使用`ListView`或`RecyclerView`展示通话...
源码中可能包括`PhoneBase`、`IccPhoneBookInterfaceManager`等类,它们实现了与手机卡(SIM)的通信,管理联系人信息,并提供API供其他应用调用。 2. **调制解调器接口(Modem Interface)**:这部分源码用于与...
通过`ContentResolver`查询`ContactsContract`中的表,如`ContactsContract.Contacts`和`ContactsContract.CommonDataKinds.Phone`,可以获取到联系人信息。 - 权限申请:读取联系人数据需要`READ_CONTACTS`权限。...
9. **数据持久化**:如果拨号盘有保存联系人或历史记录的功能,那么可能用到SharedPreferences、SQLite数据库或者ContentProvider来存储数据。 10. **性能优化**:高性能的拨号盘应用需要注意UI流畅性,可能采用...