【问题标题】:SMS Broadcast Receiver without Manifest没有清单的 SMS 广播接收器
【发布时间】:2013-04-24 02:19:48
【问题描述】:

想知道如何在不使用 Manifest 文件的情况下创建 SMS 广播接收器。例如,这是我当前的清单文件行:

<receiver android:name="com.paradopolis.randomnotifications.SMSListener">
        <intent-filter>
          <action android:name="android.provider.Telephony.SMS_RECEIVED" />
       </intent-filter>
</receiver>

它工作正常,但我希望能够删除该行并在我的服务中注册我的广播接收器,例如:

registerReceiver(new SMSListener() , [?????]);

但我找不到要使用的 Intent 过滤器,因为 SMS_RECEIVED 是 Telephony 包的一部分。所以问题是:那个意图过滤器是什么?

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    在你的java文件中创建IntentFilter,然后registerReceiver(Receiver, IntentFilter)

    操作将是 android.provider.Telephony.SMS_RECEIVED 作为字符串。

    IntentFilter i = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
    registerReceiver(new SMSListener() , i);
    

    【讨论】:

    • 完美,没有意识到我可以直接将它们转换成这样的字符串,谢谢。
    【解决方案2】:
        mSmsReceiver = new SMSreceiver();
        IntentFilter filter = new IntentFilter();
        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
        filter.addAction(SMS_RECEIVE_ACTION); // SMS
        filter.addAction(WAP_PUSH_RECEIVED_ACTION); // MMS
        this.registerReceiver(mSmsReceiver, filter);
    
        class SMSreceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (!getSMSBlockEnable()) {
                return;
            }
    
            if (TextUtils.equals(intent.getAction(), SMS_RECEIVE_ACTION)) {
    
                Bundle bundle = intent.getExtras();
                if (bundle == null) {
                    return;
                }
                Object[] messages = (Object[])bundle.get("pdus");
    
                SmsMessage smsHeader = SmsMessage.createFromPdu((byte[])messages[0]);
                if (smsHeader != null) {
                    mReceiveNumber = smsHeader.getOriginatingAddress();
                    if(TextUtils.isEmpty(mReceiveNumber)) {
                        mReceiveNumber = INVALID_NUMBER;
                    }
                }
    
               for (Object message : messages) {
                    SmsMessage sms = SmsMessage.createFromPdu((byte[])message);
                      if (sms != null) {
                        body.append(sms.getDisplayMessageBody());
                      }
              }
              mReceiveBody = body.toString();
            }
        }
    }
    

    【讨论】:

    • 对我没有帮助,因为该代码中没有定义常量 SMS_RECEIVE_ACTION :S
    • 这个答案可能会对其他用户有所帮助,该常量在 Telephony.Sms.Intents.SMS_RECEIVED_ACTION 中定义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多