Android手机获取通讯录联系人信息及短信广播实现

            现在越来越多的android应用在注册时都要用到手机号码,通过获取手机验证码来完成注册。也有不少应用提供了手机通讯录备份功能,获得你的允许后把你的通讯录中的手机号码保存到服务器中,你要的时候又可以down下来,比如微信,QQ等就有这们的功能。那我们怎么样获取用户通讯录中的手机号码呢?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>


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。