2012-09-25 244 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应用如上?我希望他们记录在某个地方。