2017-07-31 65 views
0
public void onReceive(Context context, Intent intent) { 

    // Retrieves a map of extended data from the intent. 
    final Bundle bundle = intent.getExtras(); 

    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); 
        d.moveToFirst(); 
        String displayName = d.getString(0); 
        String 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); 

       Toast.makeText(context,"senderNum: "+ phoneNumber + ", message: " + message+ " , date:" + formattedDate + ",time: "+formattedTime+ " ,number:"+contactName, Toast.LENGTH_LONG).show(); 

      } // end for loop 
     } // bundle is null 

    } catch (Exception e) { 
     Log.e("SmsReceiver", "Exception smsReceiver" +e); 

    } 
} 

如何讀取消息類型?我也想在sqlite中存儲這些數據我是新的,所以我不知道如何使用sqlite請指導我。謝謝如何在使用BroadcastReceiver時讀取/獲取消息類型

+0

嗨,你是什麼意思就按消息類型? –

+0

INBOX,SENT,DRAFT等? –

+0

是收件箱,發送等 – fatima

回答

-1

試試這個在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; 
    } 
} 
+0

我要試試這個謝謝 – fatima

+0

你能否解釋一下ContactDataSource的用途以及我們爲什麼使用它。 – fatima

+0

它只是一個單獨的類,打開/關閉數據庫並執行CURD操作,而最重要的是其維護編碼標準。 –

相關問題