2

我写了一个发送和接收短信成功的android。如何从特定电话号码接收短信?

我想我的程序能够从一个特殊号码(“+ 9856874236”)接收短信。但是,如果短信来自任何其他号码,它应该转到电话的消息收件箱,而不是我的应用程序。

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 SmsReceiver extends BroadcastReceiver { 
     public String str = ""; 

     @Override 
     public void onReceive(Context context, Intent intent) { 

      Bundle bundle = intent.getExtras(); 
      Object messages[] = (Object[]) bundle.get("pdus"); 
      SmsMessage[] msgs = null; 

      if (bundle != null) 
      { 

       Object[] pdus = (Object[]) bundle.get("pdus"); 
       SmsMessage smsMessage[] = new SmsMessage[messages.length];  
       String msg_from=""; 
       for (int n = 0; n < messages.length; n++) 
       { 
        smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
         msg_from += msgs[n].getOriginatingAddress(); 
       } 

       String receivedMessage = smsMessage[0].getMessageBody().toString().toUpperCase(); 


       if(msg_from .equals("+989124236870")) 
       { 
       for (int n = 0; n < messages.length; n++) 
       { 

        smsMessage[n] = SmsMessage.createFromPdu((byte[]) pdus[n]); 
        str += "SMS from " + msgs[n].getOriginatingAddress(); 
        str += " :"; 
        //str += "sms az shomare makhsus"; 
        str += msgs[n].getMessageBody().toString(); 

        str += "\n"; 

       abortBroadcast(); 

       } 


       Intent act = new Intent(context, MainActivity.class); 
       act.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       act.putExtra("message", str); 
       context.startActivity(act); 
      } 


      } 

     } 
    } 
+0

看来你有4个类似的问题打开。 1. http://stackoverflow.com/questions/13108337/how-to-receive-sms-only-from-one-specific-number-other-smss-go-to-phones-inbox 2. HTTP:/ /stackoverflow.com/questions/13097704/how-to-received-sms-from-special-number 3. http://stackoverflow.com/questions/13107161/filtering-received-sms-in-android 4.本一。 不酷。请不要这样做。 –

+0

因为我没有得到我的问题的答案!!!!!!!!我没有任何办法!你能解决我的问题吗? – Pariya

回答

0

为什么要在for循环中追加msg_from参数?

msg_from += msgs[n].getOriginatingAddress(); 

它不应该仅仅是:

msg_from[n] = msgs[n].getOriginatingAddress(); 

基本上具有用于msg_from [n]的一个数组并把每个起始地址到它为每一个消息。 然后通过遍历msg_from数组检查每个消息的这个?

您可以将检查原产里面的for循环如下:

for (int n = 0; n < messages.length; n++) { 
      if(msg_from[n].equals("+9856874236")){ 
       smsMessage[n] = SmsMessage.createFromPdu((byte[]) pdus[n]); 
       str += "SMS from " + msg_from[n]; 
       str += " :"; 
       //str += "sms az shomare makhsus"; 
       str += msgs[n].getMessageBody().toString(); 

       str += "\n"; 

       abortBroadcast(); 
       }else{ 
       //Do something else 
       } 
      } 
+0

在if条件下,应该不会改变? “if(msg_from .equals(”+ 9856874236“))” – Pariya

+0

是的,它应该。我有我的答案更新为: 如果(msg_from [N] .equals( “+ 9856874236”)) – krishnang

+0

这个代码didnt工作尚未!!!!!!!!!!!!!!!!!!!!! !1 – Pariya

0

使用该样品并进行自定义:

import android.app.Service; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.telephony.SmsMessage; 
import android.widget.Toast; 

public class SrvSmsListener extends Service { 

    private BroadcastReceiver IncomingSMSReceiver = new BroadcastReceiver() { 
     private static final String SMS_RECEIVED = 
       "android.provider.Telephony.SMS_RECEIVED"; 

     @Override 
     public void onReceive(Context _context, Intent _intent) { 
      if (_intent.getAction().equals(SMS_RECEIVED)) { 
       Bundle bundle = _intent.getExtras(); 
       if (bundle != null) { 
        Object[] pdus = (Object[]) bundle.get("pdus"); 

        SmsMessage[] messages = new SmsMessage[pdus.length]; 
        for (int i = 0; i < pdus.length; i++) 
         messages[i] = SmsMessage 
           .createFromPdu((byte[]) pdus[i]); 
        for (SmsMessage message : messages) { 
         String strPhoneNo = message.getOriginatingAddress(); 
         String msg = message.getMessageBody(); 

         if (msg.startsWith("my text")) 
         { 
          // this stops notifications to others 
          this.abortBroadcast(); 

         } 
        } 
       } 
      } 
     } 
    }; 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 
     IntentFilter filter = new IntentFilter(SMS_RECEIVED); 
     BroadcastReceiver receiver = IncomingSMSReceiver; 
     registerReceiver(receiver, filter); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public void onDestroy() { 
     if (IncomingSMSReceiver != null) 
     { 
      unregisterReceiver(IncomingSMSReceiver); 
     } 
    } 
} 
+0

这段代码创建强制关闭!!!!!!!!!!它是错误!!!! – Pariya

+0

你有没有把它添加到清单? – breceivemail

+0

我创建了新的项目,我把你的代码放在class.java中,并发送类,我把我的代码,并为清单,我把以前的代码,但它创建强制关闭时,在手机中接收短信! – Pariya

0

too.now我用这个代码,我有这个问题它正常工作:

 `enter code here` 
     if (extras != null) { 
     // get array data from SMS 
     Object[] smsExtra = (Object[]) extras.get("pdus"); // "pdus" is the key 

     for (int i = 0; i < smsExtra.length; ++i) { 
      // get sms message 
      SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]); 
      // get content and number 
      String body = sms.getMessageBody(); 
      String address = sms.getOriginatingAddress(); 
      // create display message 

      if(address.contains("5558")){ 

      messages += "SMS from " + address + " :\n"; 
      messages += body + "\n"; 

     // notify new arriving message 
      Toast.makeText(context, messages, Toast.LENGTH_LONG).show(); 

     this.abortBroadcast(); 

    } 
    } 

,也不要忘了使用此代码您的清单:

<uses-permission android:name="android.permission.WRITE_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

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

</intent-filter> 
</receiver> 

该程序只接收端口=“5558”(在仿真器中)并将其他信息存储在收件箱中。

是(09124236870)自己的电话号码?!

相关问题