Android 的SMS读取短信,可以获取发信人/收信人的手机号码(address),Contacts的联系人,可以过滤手机号码(address),因此SMS可以通过手机号码(address)关联到Contacts联系人
SMS - Contacts 关联代码
// 通过address手机号关联Contacts联系人的显示名字
private String getPeopleNameFromPerson(String address){
if(address == null || address == ""){
return "( no address )\n";
}
String strPerson = "null";
String[] projection = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER};
Uri uri_Person = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, address); // address 手机号过滤
Cursor cursor = getContentResolver().query(uri_Person, projection, null, null, null);
if(cursor.moveToFirst()){
int index_PeopleName = cursor.getColumnIndex(Phone.DISPLAY_NAME);
String strPeopleName = cursor.getString(index_PeopleName);
strPerson = strPeopleName;
}
cursor.close();
return strPerson;
}
SMS - Contacts 关联示例代码:
package com.homer.phone;
import java.sql.Date;
import java.text.SimpleDateFormat;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.util.Log;
import android.widget.ScrollView;
import android.widget.TextView;
public class phoneRead2 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(getSmsInPhone());
ScrollView sv = new ScrollView(this);
sv.addView(tv);
setContentView(sv);
}
public String getSmsInPhone() {
final String SMS_URI_ALL = "content://sms/";
final String SMS_URI_INBOX = "content://sms/inbox";
final String SMS_URI_SEND = "content://sms/sent";
final String SMS_URI_DRAFT = "content://sms/draft";
final String SMS_URI_OUTBOX = "content://sms/outbox";
final String SMS_URI_FAILED = "content://sms/failed";
final String SMS_URI_QUEUED = "content://sms/queued";
StringBuilder smsBuilder = new StringBuilder();
try {
Uri uri = Uri.parse(SMS_URI_ALL);
String[] projection = new String[] { "_id", "address", "person", "body", "date", "type" };
Cursor cur = getContentResolver().query(uri, projection, null, null, "date desc"); // 获取手机内部短信
if (cur.moveToFirst()) {
int index_Address = cur.getColumnIndex("address");
int index_Person = cur.getColumnIndex("person");
int index_Body = cur.getColumnIndex("body");
int index_Date = cur.getColumnIndex("date");
int index_Type = cur.getColumnIndex("type");
do {
String strAddress = cur.getString(index_Address);
int intPerson = cur.getInt(index_Person);
String strbody = cur.getString(index_Body);
long longDate = cur.getLong(index_Date);
int intType = cur.getInt(index_Type);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = new Date(longDate);
String strDate = dateFormat.format(d);
String strType = "";
if (intType == 1) {
strType = "接收";
} else if (intType == 2) {
strType = "发送";
} else {
strType = "null";
}
String strAddress2 = getPeopleNameFromPerson(strAddress);
smsBuilder.append("[ ");
// smsBuilder.append(strAddress + ", ");
smsBuilder.append(strAddress + " : " + strAddress2 + ", ");
smsBuilder.append(intPerson + ", ");
smsBuilder.append(strbody + ", ");
smsBuilder.append(strDate + ", ");
smsBuilder.append(strType);
smsBuilder.append(" ]\n\n");
} while (cur.moveToNext());
if (!cur.isClosed()) {
cur.close();
cur = null;
}
} else {
smsBuilder.append("no result!");
} // end if
smsBuilder.append("getSmsInPhone has executed!");
} catch (SQLiteException ex) {
Log.d("SQLiteException in getSmsInPhone", ex.getMessage());
}
return smsBuilder.toString();
}
// 通过address手机号关联Contacts联系人的显示名字
private String getPeopleNameFromPerson(String address){
if(address == null || address == ""){
return "( no address )\n";
}
String strPerson = "null";
String[] projection = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER};
Uri uri_Person = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, address); // address 手机号过滤
Cursor cursor = getContentResolver().query(uri_Person, projection, null, null, null);
if(cursor.moveToFirst()){
int index_PeopleName = cursor.getColumnIndex(Phone.DISPLAY_NAME);
String strPeopleName = cursor.getString(index_PeopleName);
strPerson = strPeopleName;
}
cursor.close();
return strPerson;
}
}
AndroidManifest.xml 权限
记得在AndroidManifest.xml中加入android.permission.READ_SMS和android.permission.READ_CONTACTS这两个permission
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
运行结果:
示例代码
参考推荐:
Android 之 Contacts 联系人读取
分享到:
相关推荐
Android之SMS短信和Contacts联系人实例
安卓Android源码——Contacts.rar
sms读取短信和contacts获取联系人
Android Contacts之三自定义的联系人列表特效 A
android contacts qurey mode
android Contacts 源码eclipse编译Contacts 联系人 eclipse 源码此为android Contacts 联系人源码在eclipse编译的APK。 可以运行在 android4.4 以及一下的系统中,本人通过大量修改 直接安装运行即可。
Android5.0 Contacts联系人源码
实现了Contacts的滑动特效,中文索引,关键字搜索等等功能。
安卓Android源码——高仿基于android2.2(Froyo)的Contacts.zip
Android Contacts之二根据4.4实现的联系人列表特效
Android Contacts API. Quick Start Initialize Contacts Library public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Contacts.initialize(this); } ...
基于Android4.4Contacts源码,不可独立运行
联系人(com.android.contacts).bak
Android源码——MyContacts通讯录源码.7z
Android4.2.2_r1版本Contacts联系人模块源码
安卓Android源码——高仿基于2.2(Froyo)的Contacts.zip
android4.1.1原生系统Contacts代码
Android 系统应用 联系人 Contacts 源码,2013年11月份下载
以前上传的联系人模块忘记把jar包放上去了 实在抱歉 现在添加上去 有需要的可以下载