Android手机获取通讯录联系人信息及短信广播实现
---------------------------------获取通讯录联系人信息---------------------------------------------------
第一步加权限:
<!-- 读取联系人 -->
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
再写代码:
/**手机上的联系人* 外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,
* 在Activity当中通过getContentResolver()可以得到当前应用的 ContentResolver实例
* */
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
StringBuffer buffers = new StringBuffer();
/**当有数据时*/
while (cursor.moveToNext()) {
/**通讯录中每个联系人的ID*/
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));/**通讯录中联系人的名字*/
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
/**联系人是否有电话,返回结果是String类型,1表示有,0表是没有*/
String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (hasPhone.equalsIgnoreCase("1"))
hasPhone = "true";
else
hasPhone = "false";
/**如果有电话,根据联系人的ID查找到联系人的电话,电话可以是多个*/
if (Boolean.parseBoolean(hasPhone)) {
Cursor mCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
String phoneNumber = "";
while (mCursor.moveToNext()) {
phoneNumber=mCursor.getString(mCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
/**如果联系人有多个电话,比如有手机也有座机时,就用{联系人:号码,联系人:号码}的形式记录下来*/
buffers.append("{");buffers.append(Api.Contact.CONTACT_NAME).append(":").append(name).append(",");
buffers.append(Api.Contact.CONTACT_NUM).append(":").append(phoneNumber);
if (cursor.isLast()) {
buffers.append("}");
} else {
buffers.append("},");
}
/**查询完要Cursor,取得了对应的信息,可以保存起来*/
mCursor.close();}
}
---------------------------------用广播监听短信信息---------------------------------------------------
第一步仍是加权限:
<!-- 收短信 -->
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<!-- 发短信 -->
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
第二步,写广播代码:
public class SmsReceiver extends BroadcastReceiver {
@SuppressLint("SimpleDateFormat")
@Override
public void onReceive(Context arg0, Intent arg1) {
/**获取广播数据*/
Bundle bundle = arg1.getExtras();
/**判断数据*/
if (bundle != null && bundle.size() > 0) {
/**获得短信内容组成的数组对象*/
Object[] objs = (Object[]) bundle.get("pdus");
for (Object object : objs) {
SmsMessage mess = SmsMessage.createFromPdu((byte[]) object);
/**收到的短信内容 */
String message = mess.getMessageBody();
/**发短信者的电话号码 */
String telephoneNum = mess.getDisplayOriginatingAddress();
/* 礼尚往来嘛,我们再给他回条信息:现在变成接收人电话号码 */
String sendTo = telephoneNum;
/**短信管理器SmsManager对象*/
SmsManager smsManager = SmsManager.getDefault();
/**添加上一个时间*/
Date date = new Date(mess.getTimestampMillis());
/**时间格式*/
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sendTime = format.format(date);
/**我们要发给对方的短信内容*/
String text = "发送时间:" + sendTime + "\n发送内容:你给我的信息内容是:"+message + "我给你回信息啦,请查收!";
/**发送短信出去*/
smsManager.sendTextMessage(sendTo, null, text, null, null);
this.abortBroadcast();// 中断广播
break;
}
}
}
}
第三步,在AndroidManifest.xml中注册广播:
<!-- 注册短信广播 -->
<receiver android:name=".sms.SmsReceiver"><!--SmsReceiver是写在我对应包名下的sms文件下 -->
<intent-filter android:priority="1000"><!-- 给了个优先级值,值越大,优先级越高 -->
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。