如何通过特定应用程序捕获来自特定发件人的SMS?

时间:2014-01-08 15:34:40

标签: android

我需要你的建议以完成以下任务。关键是我需要使用特定的手机号码保存我的应用程序,以便带有我的应用程序的设备只会响应来自此号码的短信,其他号码应该被标准或任何其他第三方应用程序捕获。我需要它,因为SMS应该包含可以使用特殊应用程序解码的特定数据。

那么,我该怎样做才能意识到这一点,或者我应该检查哪些野生动物:)?

一如既往,提前谢谢!

1 个答案:

答案 0 :(得分:1)

为了做到这一点,你需要在这些方面做点什么:

  1. 向清单添加所需的权限。可能是RECEIVE_SMS
  2. 制作短信BroadcastReceiver
  3. 处理接收方内的短信
  4. 选择使用该消息(如果仅适用于您的应用),或让股票短信应用程序选择它。
  5. 以下代码均未经过测试,更多的是起点:

    <强>清单

    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <receiver android:name=".YOURSMSReceiver">
        <intent-filter android:priority="SOMENUMBER">
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>
    

    <强> YOURSMSReceiver

    public class YOURSMSReceiver extends BroadcastReceiver
    {
         @Override
         public void onReceiver(Context context, Intent intent)
         {
             boolean bConsumeSms = false;            // flag to consume the sms so stock app doesn't pick it up
    
             String data = "";
             if(intent.getAction().equals(android.provider.Telephony.SMS_RECEIVED))
             {
                 Bundle bundlePdus = intent.getExtras();
                 Object[] pdus = (Object[])bundlePdus.get("pdus");
                 SmsMessage messages = SmsMessage.createFromPdu((byte[])pdus[0]);
                 if(messages.getOriginatingAddress() == YOURCELLNUMBER)
                 {
                      // do something with the content. 
                      // held in: messages.getMessageBody()
                      data = messages.getMessageBody();    // your custom content
    
                      // consume this sms
                      bCOnsume = true;
                 }
    
                 // in order to consume the message, we have to use abortBroadcast(). But only if we've
                 // processed it first. If not, then the stock app, should be allowed to pick it up
                 if(bConsume)
                 {
                       abortBroadcast();
                 }
             }
         }
    }
    

    正如我所说,它完全没有经过测试,但理论上你所需要的一切都在那里。根据pdu数组的大小,您还必须处理多条消息,这是我一直没有想到的。祝你好运!

    编辑 CommonsWare指出,4.4 Android操作系统无论如何都能提供所有短信。我没有意识到这一点。