2012-07-14 42 views
1

我已成功監視傳入的SMS並將其發送到數據庫以供稍後查看。我已閱讀關於顯示器傳出的短信,我真的不明白它是如何工作的。有人可以指導我如何使用ContentObserver監視傳出短信的代碼?我將從我應該開始的地方發佈所有當前的代碼,用於傳入的sms.need指南。Android中的ContentObserver

smsReceiver.java提前

package terima.sms.inbox; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.gsm.SmsMessage; 
import java.net.*; 
import java.io.*; 

@SuppressWarnings("deprecation") 
public class SmsReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 

     Object messages[] = (Object[]) bundle.get("pdus"); 
     SmsMessage SMS[] = new SmsMessage[messages.length]; 
     for (int n = 0; n < messages.length; n++) { 
      SMS[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
     } 

     String member_id = "1"; 

     inbox(SMS[0].getOriginatingAddress(), SMS[0].getMessageBody(), member_id); 
    } 

    public static Boolean inbox(String telefon, String message, String member_id){ 

     String mesej = ""; 
     for(int i = 0; i < message.length(); i++) 
     { 
      if(message.charAt(i) == ' ' || message.charAt(i) == '+') 
      { 
       if(message.charAt(i) == ' ') 
        mesej += "%20"; 
       else 
        mesej += "%2B"; 
      } 
      else 
      { 
       mesej += message.charAt(i); 
      } 
     } 

     try 
     { 
      URL oracle = new URL("http://192.168.1.111/inbox.php?message=" + mesej + "&telefon=" + telefon + "&member=" + member_id); 
      BufferedReader in = new BufferedReader(new InputStreamReader(oracle.openStream())); 

      String fetch, total = ""; 
      while ((fetch = in.readLine()) != null) 
       total += fetch; 
      in.close(); 

      if(total.equals("1")) 
       return true; 

      return false; 
     } 
     catch(Exception e) 
     { 
      return false; 
     } 
    } 
} 

感謝。

回答

3

要捕獲傳出的短信,您應該使用ContentObserver和ContentResolver。下面是我在ContentObserver使用代碼:

public class SmsObserver extends ContentObserver{ 

int smsCount; 

public SmsObserver(Context context) { 
    super(new Handler()); 

    smsCount = 0; 

} 


public void onChange(boolean selfChange){ 
    super.onChange(selfChange); 
    readSms(); 
} 

private void readSms(){ 
    Uri uriSMS = Uri.parse("content://sms"); 
    Cursor cur = context.getContentResolver().query(uriSMS, null, null, null, "_id"); 

    cur.moveToLast(); 
    int id = Integer.parseInt(cur.getString(cur.getColumnIndex("_id"))); 

    if(cur != null && id != smsCount && id>0){ 
     smsCount = id; 

    int type = Integer.parseInt(cur.getString(cur.getColumnIndex("type"))); 

     if(type == 1){ 
      // handle the received sms 

     } 
     else{ 
      // handle the sent sms 
     } 
    } 

    cur.close(); 

} 
} 

之後,你應該創建SmsOberver的一個實例,並將其註冊的「內容://短信」。與發送或接收新消息相比,它會被觸發得更多,所以這就是爲什麼我有一個smsCount字段。

+0

非常感謝! – pervin 2012-09-09 05:27:48

+0

沒問題!如果有幫助,你可以批准答案嗎?謝謝 – benjamin 2012-09-29 02:22:43