2012-09-25 423 views
0

我正在學習如何在機器人發送短信的內容,已經看到下面的代碼:的意圖在廣播接收器

public class SMSReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
    //---get the SMS message passed in--- 
    Bundle bundle = intent.getExtras(); 
    SmsMessage[] msgs = null; 
    String str = 「」; 
    if (bundle != null) 
    { 
     //---retrieve the SMS message received--- 
     Object[] pdus = (Object[]) bundle.get(「pdus」); 
     msgs = new SmsMessage[pdus.length]; 
     for (int i=0; i<msgs.length; i++){ 
     msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
     str += 「SMS from 「 + msgs[i].getOriginatingAddress(); 
     str += 「 :」; 
     str += msgs[i].getMessageBody().toString(); 
     str += 「\n」; 
    } 
    //---display the new SMS message--- 
    Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
    } 
    } 
} 

現在我的問題是我怎麼知道是什麼意圖對象的內容傳入onReceive函數?如下:

Object[] pdus = (Object[]) bundle.get(「pdus」); 

如何知道捆綁對象中存在「pdus」鍵? 我在API文檔中找不到任何線索,任何人都知道相關信息位於何處?

我不僅想知道SMS intent傳遞給onReceive函數的什麼,還有其他系統相關的Intent,但是我找不到API文檔中的任何相關信息。我想知道這些信息真的存在嗎?

回答

2

您可以檢查包包含一個鍵值對使用bundle.containsKey("pdus")如果有任何Protocol Data Units(PDU的而你的情況是的短信),返回鍵truepdus

所以,用於處理的PDU的檢查應if (bundle != null && bundle.containsKey("pdus"))

+0

其實我不是問這個問題,我想知道包中所有可能的密鑰和它們保留的值,但到目前爲止,我在API文檔中找不到它們。我想他們被記錄在某處,但找不到它。 – GMsoF

+1

所有可能的密鑰都可以使用[keySet()](http://developer.android.com/reference/android/os/Bundle.html#keySet())獲得。 AFAIK沒有記錄他們保留的(任何)標準'intent filters'的價值。 – 500865

+0

他們怎麼沒有記錄這些密鑰?那麼我們怎麼知道這些關鍵所在?即使我使用KeySet()函數打印出這些密鑰,但我仍然不清楚它們是什麼。赦免,你怎麼知道什麼「psud」代表你處理短信?我在下面的答案中發佈了一些內容,你能幫助我嗎? – GMsoF

0
public void onClick(View v) 
{ 
    //sendSMS(「5556」, 「Hello my friends!」); 
    Intent i = new 
    Intent(android.content.Intent.ACTION_VIEW); 
    i.putExtra(「address」, 「5556; 5558; 5560」); 
    i.putExtra(「sms_body」, 「Hello my friends!」); 
    i.setType(「vnd.android-dir/mms-sms」); 
    startActivity(i); 
} 

我們怎麼能檢查所有可能的密鑰,當我們想進入的意圖用於調用SMS應用如上?我希望他們記錄在某個地方。