試試這個在SQLite中保存消息。希望這可以幫助你。
BroadCastRecivier類
private String contactName = "UnKnown"
private ContactDataSource contactDataSource;
public void onReceive(Context context, Intent intent) {
// Retrieves a map of extended data from the intent.
final Bundle bundle = intent.getExtras();
contactDataSource = new ContactDataSource(context);
contactDataSource .open();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String message = currentMessage.getDisplayMessageBody();
String phoneNumber = currentMessage.getDisplayOriginatingAddress();
Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
Cursor d=context.getContentResolver().query(lookupUri, new String[]{ContactsContract.Data.DISPLAY_NAME},null,null,null);
if(d.getCount() > 0){
d.moveToFirst();
String displayName = d.getString(0);
contactName = displayName;
d.close();
}
Date date = new Date(currentMessage.getTimestampMillis());
String formattedDate = new SimpleDateFormat("MM/dd/yyyy").format(date);
long time = date.getTime();
String formattedTime = new SimpleDateFormat("hh:mm:ss").format(time);
contactDataSource.addContact(phoneNumber, contactName, "INBOX", message, formattedDate, formattedTime);
} // end for loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" +e);
}
contactDataSource.close();
}
MySQLiteHelper.JAVA
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class MySQLiteHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = ; //database_name.db
private static final int DATABASE_VERSION = 18;
public MySQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL(ContactColumn.getCreateTableQry(ContactColumn.TABLE_CONTACT));
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(MySQLiteHelper.class.getName(),
"Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + ContactColumn.TABLE_CONTACT);
onCreate(db);
}
}
ContactColumn.JAVA
public class ContactColumn {
public static final String TABLE_CONTACT = "drivers";
public static final String COLUMN_ID = "columnId";
public static final String COLUMN_PHONE_NO = "phoneNumber";
public static final String COLUMN_CONTACT_NAME = "contactName";
public static final String COLUMN_MESSAGE_TYPE = "messageType";
public static final String COLUMN_MESSAGE_TEXT = "messageText";
public static final String COLUMN_MESSAGE_DATE = "messageDate";
public static final String COLUMN_MESSAGE_TIME = "messageTime";
public static String getCreateTableQry(String tableName) {
StringBuilder sqlStmt = new StringBuilder();
sqlStmt.append("CREATE TABLE IF NOT EXISTS ");
sqlStmt.append(tableName);
sqlStmt.append(" (");
sqlStmt.append(COLUMN_ID); //0
sqlStmt.append(" INTEGER PRIMARY KEY,");
sqlStmt.append(COLUMN_PHONE_NO); //1
sqlStmt.append(" TEXT,");
sqlStmt.append(COLUMN_CONTACT_NAME); //2
sqlStmt.append(" TEXT,");
sqlStmt.append(COLUMN_MESSAGE_TYPE); //3
sqlStmt.append(" TEXT,");
sqlStmt.append(COLUMN_MESSAGE_TEXT); //4
sqlStmt.append(" TEXT,");
sqlStmt.append(COLUMN_MESSAGE_DATE); //5
sqlStmt.append(" TEXT,");
sqlStmt.append(COLUMN_MESSAGE_TIME); //6
sqlStmt.append(" TEXT");
sqlStmt.append(");");
return sqlStmt.toString();
}
}
ContactDataSource.JAVA
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
public class ContactDataSource {
SQLiteDatabase database;
MySQLiteHelper dbHelper;
public ContactDataSource(Context context){
dbHelper = new MySQLiteHelper(context);
}
//before any action on database need to open DB
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
//must close after all transction done.
public void close() {
dbHelper.close();
}
//add contact to database
public void addContact(String phoneNumber, String contactName, String messageType, String messageText, String messageDate, String messageTime) {
ContentValues contentValues = new ContentValues();
contentValues.put(ContactColumn.COLUMN_PHONE_NO , phoneNumber);
contentValues.put(ContactColumn.COLUMN_CONTACT_NAME , contactName);
contentValues.put(ContactColumn.COLUMN_MESSAGE_TYPE , messageType);
contentValues.put(ContactColumn.COLUMN_MESSAGE_TEXT , messageText);
contentValues.put(ContactColumn.COLUMN_MESSAGE_DATE , messageDate);
contentValues.put(ContactColumn.COLUMN_MESSAGE_TIME , messageTime);
database.insert(ContactColumn.TABLE_CONTACT, null, contentValues);
}
//get the total count of table ContactColumn.TABLE_CONTACT
public int getCount(){
StringBuilder selectQuery = new StringBuilder();
selectQuery.append("SELECT * FROM ");
selectQuery.append(ContactColumn.TABLE_CONTACT);
Cursor cursor = database.rawQuery(selectQuery.toString(), null);
int count = cursor.getCount();
return count;
}
//get all contacts
public ArrayList<ContactPOJO> getContacts(){
ArrayList<ContactPOJO> result = new ArrayList<ContactPOJO>();
StringBuilder selectQuery = new StringBuilder();
selectQuery.append("SELECT * FROM ");
selectQuery.append(ContactColumn.TABLE_CONTACT);
Cursor cursor = database.rawQuery(selectQuery.toString(), null);
if(cursor.getCount() != 0){
while (cursor.moveToNext()){
ContactPOJO pack = new ContactPOJO();
pack.setPhoneNumber(cursor.getString(1));
pack.setContactName(cursor.getString(2));
pack.setMessageType(cursor.getString(3));
pack.setMessageText(cursor.getString(4));
pack.setMessageDate(cursor.getString(5));
pack.setMessageTime(cursor.getString(6));
result.add(pack);
}
}
return result;
}
//delete all contact
public void deleteContacts(){
database.delete(ContactColumn.TABLE_CONTACT, null, null);
}
}
ContactPOJO.JAVA
public class ContactPOJO {
private String phoneNumber;
private String contactName;
private String messageType;
private String messageText;
private String messageDate;
private String messageTime;
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getMessageType() {
return messageType;
}
public void setMessageType(String messageType) {
this.messageType = messageType;
}
public String getMessageText() {
return messageText;
}
public void setMessageText(String messageText) {
this.messageText = messageText;
}
public String getMessageDate() {
return messageDate;
}
public void setMessageDate(String messageDate) {
this.messageDate = messageDate;
}
public String getMessageTime() {
return messageTime;
}
public void setMessageTime(String messageTime) {
this.messageTime = messageTime;
}
}
嗨,你是什麼意思就按消息類型? –
INBOX,SENT,DRAFT等? –
是收件箱,發送等 – fatima