2014-01-20 2 views
0

Привет, мое требование - получать sms с определенного номера. Я хочу показать полученное сообщение в textview.but, я не могу принять значение из BroadcastReceiver в своей деятельности. я не знаю, где я сделал mistake.please сказать мнекак позвонить BroadcastReceiver в действие

мой код

SmsReceiver

public class SmsReceiver extends BroadcastReceiver { 

public String str=null; 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 

    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("XXXXXXXX")) 
      { 
       //=============================== 
      str += "SMS from " + msgs[i].getOriginatingAddress(); 
      str += " :"; 
      str += msgs[i].getMessageBody().toString(); 
      str += "\n";  
      Intent act = new Intent(context, MainActivity.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(); 
    } 

} 
} 

MainActivity

public class MainActivity extends Activity { 

private TextView showText; 
private String receivedSms; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Intent intent = getIntent(); 
    receivedSms =intent.getStringExtra("message"); 
    Log.e("mysms", receivedSms); 
    showText = (TextView)findViewById(R.id.showText); 
    showText.setText(receivedSms); 
} 

    } 
+0

Что происходит с ошибкой ?? –

+0

nullpointerException начислено, когда сообщение Log.e() напечатано, если я удалил Log.e, он не показывает никакого значения из textview – Durga

+0

полученоSms is null ?? –

ответ

0

Добавьте это в файл манифеста:

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

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

// внутри класса приемника

Окончательный Bundle расслоении = intent.getExtras(); try {

if (bundle != null) { 

    final Object[] pdusObj = (Object[]) bundle.get("pdus"); 

    for (int i = 0; i < pdusObj.length; i++) { 

     SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
     String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 

     String senderNum = phoneNumber; 
     String message = currentMessage.getDisplayMessageBody(); 

    } 
    } 
} 
catch (Exception e) { 
e.printstacktrac(); 
} 

передать строку сообщения вашей деятельности.

+0

спасибо, но я хочу прочитать sms с определенного номера – Durga

+0

, а затем сравнить свой номер с полученным номером. – Vijju

+0

Я написал тот же код, что и отправил, но в logcat Log.e («CHEKING», сообщение); ни одно сообщение не напечатано – Durga

0

попытка изменения:

public String str=null; 

к:

public String str=""; 

Я предложил бы использовать StringBuffer вместо и добавить строку в него.

+0

нет его не работает – Durga

Смежные вопросы