標籤: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>
Android手機擷取通訊錄連絡人資訊及簡訊廣播實現