android打电话,发短信,获取通讯录、通话记录、短信记录


在Android平台上,开发人员可以利用特定的API来实现与用户通信相关的功能,如拨打电话、发送短信、访问通讯录、获取通话记录以及短信记录。这些功能对于构建许多实用的应用程序至关重要,例如联系人管理工具、日程助手或者安全监控应用等。下面我们将详细探讨这些知识点。 1. 拨打电话: 要在Android应用中实现拨打电话的功能,可以使用`Intent`类的`ACTION_CALL`动作。创建一个隐式意图,并设置电话号码作为数据URI,然后通过`startActivity()`启动这个意图。注意,自Android 6.0(API级别23)起,您需要请求`CALL_PHONE`权限才能执行此操作。 ```java Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:" + phoneNumber)); if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { // 请求权限 } else { startActivity(callIntent); } ``` 2. 发送短信: 发送短信涉及使用`SmsManager`类。同样需要在Android 6.0及以上版本请求`SEND_SMS`权限。然后,调用`SmsManager`的`sendTextMessage()`方法,传入接收方号码、短信内容和一个发送完成的回调。 ```java if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { // 请求权限 } else { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNumber, null, message, null, null); } ``` 3. 访问通讯录: Android提供了`ContentResolver`和`ContactsContract`类来读取和写入通讯录。要获取所有联系人,可以查询`ContactsContract.Contacts`表,然后遍历结果集。请注意,从Android 6.0开始,需要请求`READ_CONTACTS`权限。 ```java Uri contactsUri = ContactsContract.Contacts.CONTENT_URI; String[] projection = { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }; Cursor cursor = getContentResolver().query(contactsUri, projection, null, null, null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); // 处理联系人信息 } cursor.close(); ``` 4. 获取通话记录: 通话记录可以通过查询`CallLog.Calls`表来获取。需要的权限同样是`READ_CALL_LOG`。查询结果包括通话类型(如来电、去电、未接),时间,联系人ID等信息。 ```java Uri callLogUri = CallLog.Calls.CONTENT_URI; String[] columns = { CallLog.Calls.NUMBER, CallLog.Calls.TYPE, CallLog.Calls.DATE }; Cursor callCursor = getContentResolver().query(callLogUri, columns, null, null, CallLog.Calls.DATE + " DESC"); while (callCursor.moveToNext()) { String number = callCursor.getString(callCursor.getColumnIndex(CallLog.Calls.NUMBER)); int type = callCursor.getInt(callCursor.getColumnIndex(CallLog.Calls.TYPE)); long date = callCursor.getLong(callCursor.getColumnIndex(CallLog.Calls.DATE)); // 处理通话记录 } callCursor.close(); ``` 5. 获取短信记录: 获取短信记录需要用到`SmsMessage`类和`SMS_RECEIVED`广播接收器。由于安全原因,直接查询短信数据库已不再被推荐,而应监听短信接收广播。注册一个BroadcastReceiver,在`onReceive()`方法中解析接收到的SMS intent,获取短信内容和发送者信息。 ```java public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); for (Object pdu : pdus) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu); String sender = smsMessage.getDisplayOriginatingAddress(); String message = smsMessage.getMessageBody(); // 处理接收到的短信 } } } } } ``` 记得在AndroidManifest.xml中注册这个广播接收器,并请求`RECEIVE_SMS`权限。 以上就是Android开发中实现打电话、发送短信、获取通讯录、通话记录、短信记录的基本步骤和关键知识点。在实际应用中,可能还需要处理更多细节,如异常处理、UI交互、多线程等。通过深入理解这些API和使用实践,开发者可以创建出更丰富、更个性化的通信应用。















- 粉丝: 26
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于STC89C52系列单片机的倒计时器制作研究.doc
- A星算法matlab源码及详细注释.doc
- 宾馆信息管理系统数据库课程设计报告.doc
- 网络安全的基本知识.docx
- 软件工程开题报告.doc
- 基于医疗大数据的DRGs分析(白板).ppt
- 医疗改革中公共卫生体系信息化建设探讨.doc
- 基于面向对象技术的楼宇自控网络协议的实现.doc
- 电器有限公司网络营销策划方案.pptx
- 基于MicroBlaze的嵌入式系统设计.doc
- 网络社交聊天的吸引力话术.doc
- 数据库培训-高主任1.ppt
- 各种BIOS详细设置图解.docx
- 矿井开采设计CAD第章专业图纸绘制.ppt
- 网络基础设施安全.ppt
- 计算机联锁系统故障处理.ppt


