自己研究:
package com.liyong.data;
import java.util.Date;
public class MyMessage {
private int messageNum;
private String message;
private String phonenumber;
private String name;
private String date;
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMessageNum() {
return messageNum;
}
public void setMessageNum(int messageNum) {
this.messageNum = messageNum;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
public MyMessage() {
}
public MyMessage(int messageNum, String message, String phonenumber) {
this.messageNum = messageNum;
this.message = message;
this.phonenumber = phonenumber;
}
public MyMessage(String date,String name, String message, String phonenumber,String type) {
this.type=type;
this.date = date;
this.name = name;
this.message = message;
this.phonenumber = phonenumber;
}
}
方法:
public static ArrayList<MyMessage> getSmsInfos(Context context) {
final String SMS_URI_INBOX = "content://sms/inbox";// 收信箱
ArrayList<MyMessage> mymessages=null;
try {
ContentResolver cr = context.getContentResolver();
String[] projection = new String[] { "_id", "address", "person","body", "date", "type" };
Uri uri = Uri.parse(SMS_URI_INBOX);
Cursor cursor = cr.query(uri, projection, null, null, "date desc");
mymessages=new ArrayList<MyMessage>();
MyMessage message=null;
while (cursor.moveToNext()) {
message = new MyMessage();
// -----------------------信息----------------
int nameColumn = cursor.getColumnIndex("person");// 联系人姓名列表序号
int phoneNumberColumn = cursor.getColumnIndex("address");// 手机号
int smsbodyColumn = cursor.getColumnIndex("body");// 短信内容
int dateColumn = cursor.getColumnIndex("date");// 日期
int typeColumn = cursor.getColumnIndex("type");// 收发类型 1表示接受 2表示发送
String nameId = cursor.getString(nameColumn);
String phoneNumber = cursor.getString(phoneNumberColumn);
String smsbody = cursor.getString(smsbodyColumn);
Date d = new Date(Long.parseLong(cursor.getString(dateColumn)));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd " + "\n" + "hh:mm:ss");
String date = dateFormat.format(d);
// --------------------------匹配联系人名字--------------------------
Uri personUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,phoneNumber);
Cursor localCursor = cr.query(personUri, new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup.PHOTO_ID,PhoneLookup._ID }, null, null, null);
System.out.println(localCursor.getCount());
System.out.println("之前----"+localCursor);
if (localCursor.getCount()!=0) {
localCursor.moveToFirst();
System.out.println("之后----"+localCursor);
String name = localCursor.getString(localCursor.getColumnIndex(PhoneLookup.DISPLAY_NAME));
message.setName(name);
}else{
message.setName(phoneNumber);
}
localCursor.close();
message.setDate(date);
message.setMessage(smsbody);
message.setPhonenumber(phoneNumber);
mymessages.add(message);
}
} catch (SQLiteException e) {
e.printStackTrace();
}
return mymessages;
}
package com.liyong.data;
import java.util.Date;
public class MyMessage {
private int messageNum;
private String message;
private String phonenumber;
private String name;
private String date;
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMessageNum() {
return messageNum;
}
public void setMessageNum(int messageNum) {
this.messageNum = messageNum;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
public MyMessage() {
}
public MyMessage(int messageNum, String message, String phonenumber) {
this.messageNum = messageNum;
this.message = message;
this.phonenumber = phonenumber;
}
public MyMessage(String date,String name, String message, String phonenumber,String type) {
this.type=type;
this.date = date;
this.name = name;
this.message = message;
this.phonenumber = phonenumber;
}
}
方法:
public static ArrayList<MyMessage> getSmsInfos(Context context) {
final String SMS_URI_INBOX = "content://sms/inbox";// 收信箱
ArrayList<MyMessage> mymessages=null;
try {
ContentResolver cr = context.getContentResolver();
String[] projection = new String[] { "_id", "address", "person","body", "date", "type" };
Uri uri = Uri.parse(SMS_URI_INBOX);
Cursor cursor = cr.query(uri, projection, null, null, "date desc");
mymessages=new ArrayList<MyMessage>();
MyMessage message=null;
while (cursor.moveToNext()) {
message = new MyMessage();
// -----------------------信息----------------
int nameColumn = cursor.getColumnIndex("person");// 联系人姓名列表序号
int phoneNumberColumn = cursor.getColumnIndex("address");// 手机号
int smsbodyColumn = cursor.getColumnIndex("body");// 短信内容
int dateColumn = cursor.getColumnIndex("date");// 日期
int typeColumn = cursor.getColumnIndex("type");// 收发类型 1表示接受 2表示发送
String nameId = cursor.getString(nameColumn);
String phoneNumber = cursor.getString(phoneNumberColumn);
String smsbody = cursor.getString(smsbodyColumn);
Date d = new Date(Long.parseLong(cursor.getString(dateColumn)));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd " + "\n" + "hh:mm:ss");
String date = dateFormat.format(d);
// --------------------------匹配联系人名字--------------------------
Uri personUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,phoneNumber);
Cursor localCursor = cr.query(personUri, new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup.PHOTO_ID,PhoneLookup._ID }, null, null, null);
System.out.println(localCursor.getCount());
System.out.println("之前----"+localCursor);
if (localCursor.getCount()!=0) {
localCursor.moveToFirst();
System.out.println("之后----"+localCursor);
String name = localCursor.getString(localCursor.getColumnIndex(PhoneLookup.DISPLAY_NAME));
message.setName(name);
}else{
message.setName(phoneNumber);
}
localCursor.close();
message.setDate(date);
message.setMessage(smsbody);
message.setPhonenumber(phoneNumber);
mymessages.add(message);
}
} catch (SQLiteException e) {
e.printStackTrace();
}
return mymessages;
}
本文详细阐述了如何使用Java编程语言,通过ContentResolver接口从Android设备中获取短信信息,并解析出联系人姓名、电话号码、短信内容和发送日期等关键数据。程序首先定义了一个名为MyMessage的类,用于封装短信的各个属性。接着,通过调用ContentResolver的query方法,从设备的短信数据库中获取所有短信记录,并利用Cursor遍历这些记录。在遍历过程中,程序解析出每条短信的相关信息,如联系人姓名、电话号码、短信内容、发送日期等,并创建MyMessage对象进行存储。最后,将收集到的所有短信信息封装为ArrayList<MyMessage>类型的集合返回。

874

被折叠的 条评论
为什么被折叠?



