`

PhoneState查看拨号器状态及显示联系人信息

 
阅读更多

添加权限

 

<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系统中,电话拨号器是系统服务的一部分,由电信框架提供支持,通常与联系人应用紧密集成。这篇文章将深入探讨电话拨号器的工作原理、涉及的核心组件以及如何进行定制开发。 首先,我们要理解Android的电话...

    电话拨号器

    1. **用户界面设计**:电话拨号器的界面通常包含数字键盘、联系人列表、通话记录等功能模块。数字键盘用于输入电话号码,其设计需考虑易用性和响应速度;联系人列表则提供快速拨号功能,将常用联系人展示出来,可能...

    android电话拨号器源代码

    5. 联系人集成:拨号器通常会集成到系统联系人应用,以便用户可以快速拨号。这涉及到`ContentProvider`和`CursorLoader`的使用,以读取联系人数据。 6. 事件监听和回调:例如,监听电话状态改变的`...

    Android下的拨号器

    8. **权限**:拨号器需要`READ_PHONE_STATE`权限来查看当前的电话状态,以及`CALL_PHONE`权限来拨打电话。这些需要在AndroidManifest.xml中明确声明。 9. **Intent**:Android应用之间通过Intent进行通信。拨号器...

    Android拨号器---熟练控件与布局的应用

    6. **源码分析**:通过分析Android系统自带拨号器的源码,可以学习到更高级的功能实现,如联系人集成、来电显示、通话记录等。 7. **自定义动画和过渡效果**:为了提升用户体验,拨号器可能会添加按键按下效果、...

    android电话拨号器

    在Android平台上,电话拨号器是系统的核心组件之一,它允许用户通过图形用户界面拨打、接听电话以及管理联系人。本项目"android电话拨号器"着重于开发一个功能完善的模拟电话拨号应用,能够支持在多设备环境中进行...

    android拨号器&短信发送

    1. UI设计:通常使用Android的布局组件(如LinearLayout, RelativeLayout)构建拨号键盘和联系人列表界面。通过EditText接收用户输入的电话号码,并提供拨号按钮触发拨号操作。 2. 拨号权限:应用需要在...

    android快捷拨号demo

    添加`&lt;uses-permission android:name="android.permission.READ_CONTACTS" /&gt;`确保应用有权限读取联系人信息。 5. **Intent与BroadcastReceiver**:当用户点击快捷拨号条目时,创建一个Intent,指定ACTION_CALL ...

    android遮挡系统拨号界面 类似360来电显示的那个绿色 页面

    在Android系统中,"遮挡系统拨号界面"通常指的是创建一个悬浮窗口或者顶级窗口(Top Window),使其能够在用户进行拨号操作时显示在系统拨号界面之上,类似360来电显示那样显示一些自定义信息,比如联系人头像、姓名...

    android 2.3 Phone 源码 0分下载

    拨号器模块实现了用户界面与电话服务的交互,包括数字键盘的逻辑、拨号操作的执行以及联系人检索功能。通过源码,我们可以学习到UI事件如何转化为电话请求,并了解如何处理呼叫状态的变化。 4. **通话管理(Call ...

    android 电话拨号代码程序

    在拨打电话时,你可以创建一个Intent,指定动作(ACTION_DIAL或ACTION_CALL)来启动电话拨号器或直接拨打电话。例如: ```java Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:" +...

    Android 公司通讯录(含来电号码姓名查询和搜索功能).rar

    开发者需要注册广播接收器监听电话状态变化(例如`PhoneStateListener`),当有来电时,获取来电号码,然后通过ContentResolver查询与之关联的联系人信息,将姓名展示在来电界面上。 4. **用户界面设计**:良好的...

    Android程序研发源码Android 多功能拨号盘源码.zip

    6. **数据存储**:如果拨号盘有联系人功能,可能会涉及到SQLite数据库或SharedPreferences来存储联系人信息。SQLite用于结构化的数据存储,而SharedPreferences适合保存小量配置数据。 7. **Intent与IntentFilter**...

    android权限设置大全

    Android权限系统允许应用程序请求访问设备的某些功能或数据,如位置信息、联系人列表、照片、录音等。以下是Android权限设置大全的详细介绍: 位置信息权限 * android.permission.ACCESS_CHECKIN_PROPERTIES:访问...

    Android监听系统来电并弹出提示窗口

    在Android平台上实现监听系统来电并弹出提示窗口的功能,涉及到多个方面的知识点。...这些内容共同构成了一个完整的功能实现,可以用于提升应用的用户体验,比如在来电时显示联系人详细信息、来电号码归属地信息等。

    AndroidDialer_android源码_源码

    - **ContactProvider**:联系人信息的提供者,对接SQLite数据库,实现了ContentProvider接口,使得其他应用可以通过ContentResolver查询或修改联系人信息。 - **DialtactsActivity**:主界面,展示了联系人列表,...

    安卓通话.zip

    2. **Activity**:主活动(MainActivity)可能会有一个用户界面,用于拨打电话、查看通话记录或管理联系人。这通常涉及到使用`Intent`来启动拨号器或者直接拨打电话,以及使用`ListView`或`RecyclerView`展示通话...

    安卓的电话部分的源码

    源码中可能包括`PhoneBase`、`IccPhoneBookInterfaceManager`等类,它们实现了与手机卡(SIM)的通信,管理联系人信息,并提供API供其他应用调用。 2. **调制解调器接口(Modem Interface)**:这部分源码用于与...

    基于android APP(电话、短信、电话薄)

    通过`ContentResolver`查询`ContactsContract`中的表,如`ContactsContract.Contacts`和`ContactsContract.CommonDataKinds.Phone`,可以获取到联系人信息。 - 权限申请:读取联系人数据需要`READ_CONTACTS`权限。...

    Android 多功能拨号盘源码.zip源码资源下载

    9. **数据持久化**:如果拨号盘有保存联系人或历史记录的功能,那么可能用到SharedPreferences、SQLite数据库或者ContentProvider来存储数据。 10. **性能优化**:高性能的拨号盘应用需要注意UI流畅性,可能采用...

Global site tag (gtag.js) - Google Analytics