0

我希望我的程序能够接收来自特殊号码(“+9856874236”)的短信。但是,如果 SMS 来自任何其他号码,它应该发送到手机的消息收件箱,而不是我的应用程序。

请帮帮我,亲爱的

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

public class receiver extends BroadcastReceiver {
      public String str = "";

        @Override
        public void onReceive(Context context, Intent intent) {
            // ---get the SMS message passed in---

            Bundle bundle = intent.getExtras();
            SmsMessage[] msgs = null;

            if (bundle != null) {

                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]);

                    //for get sms from special number===============================
                    String msg_from = msgs[i].getOriginatingAddress();
                    Log.v("msg_from >>",msg_from);     
                    if(msg_from.equals("+9830007546"))
                    {
                        //===============================
                    str += "SMS from " + msgs[i].getOriginatingAddress();
                    str += " :";
                    str += msgs[i].getMessageBody().toString();
                    str += "\n";    
                    Intent act = new Intent(context, ReceiveSMS.class);
                    act.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    act.putExtra("message", str);
                    context.startActivity(act);

                    this.abortBroadcast();
                    }

                }
                // ---display the new SMS message---
                // Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
            }

            }
    }

主要课程:

     private TextView showSms;
 private String   ReceivedSms;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    //this.setContentView(R.layout.receivesms);
     /*Removing system bar from screen*/
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.receivesms);
    Intent act = getIntent();       
    ReceivedSms = act.getStringExtra("message");
    showSms = (TextView) this.findViewById(R.id.textView2);
    showSms.setText(ReceivedSms);
4

2 回答 2

1

BroadcastReceiver在您的AndroidManifest. 这将使您的接收器首先排队处理广播。

<receiver 
    android:name=".SmsReceiver">                        
        <intent-filter
            android:priority="1000">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
</receiver>

在您的内部BroadcastReceiver,检查传入短信的数量是否等于您给定的数量。如果为真,则使用 取消广播abortBroadcast()

编辑

有几件事需要注意:

  • 进行号码匹配时,请注意电话号码格式。如果传入的号码是0123456789并且您使用String.equals('+XX0123456789'),那么您的检查将失败,即使它在技术上是正确的。查看PhoneNumberUtils以找到解决方案。
  • 如果我没记错的话,一些设备制造商在处理 SMS 广播时已将默认 SMS 应用程序优先级设为 1。这会弄乱您的应用程序。一定要测试一下;)
于 2013-04-04T23:18:50.840 回答
0

假设您的意思是说您的特殊号码不应该出现在收件箱中......

您不能重新路由电话正在接收的消息。因此,您必须在收到该消息后在 MMS 数据库中查找并删除它,没有其他方法。

于 2013-04-04T23:08:03.663 回答