2013-03-17 2 views
1

나는 eclips에서 SMS를 보내고 받았다. 나는 특별 전화 번호를 설정했다. 특별 전화 번호로받은 SMS는 프로그램에 들어가고 다른 SMS에는 전화 번호로 간다. 지금 전화가 특별 전화 번호로 수신되면 프로그램이 열리지 만 프로그램에는 표시되지 않는다. 도와주세요.받은 SMS를 프로그램에 표시하지 않는 이유는 무엇입니까?

public class SmsReceiver 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("09124502715")) 
       { 
        //=============================== 
       str += "SMS from " + msgs[i].getOriginatingAddress(); 
       str += " :"; 
       str += msgs[i].getMessageBody().toString(); 
       str += "\n"; 
       } 

      } 
      // ---display the new SMS message--- 
      // Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
      Intent act = new Intent(context, MainActivity.class); 
      act.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      act.putExtra("message", str); 
      context.startActivity(act); 
     } 

     abortBroadcast(); 
     } 
    } 



public class MainActivity extends Activity { 

private TextView showSms; 

    private String ReceivedSms; 

    @Override 

    public void onCreate(Bundle savedInstanceState) 
{ 

super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

     super.onCreate(savedInstanceState); 

    // _smsReceiver.onReceive(getBaseContext(), getIntent()); 

     setContentView(R.layout.activity_main); 

    Intent _intent = getIntent(); 

    ReceivedSms = _intent.getStringExtra("message"); 

    showSms = (TextView) this.findViewById(R.id.txt_Show); 

    showSms.setText(ReceivedSms); 

} 


@Override 

    public boolean onCreateOptionsMenu(Menu menu) 
{ 

getMenuInflater().inflate(R.menu.activity_main, menu); 

     return true; 

} 

} 



public class SMS extends Activity { 

    Button btnSendSMS; 
     EditText txtPhoneNo; 
     EditText txtMessage; 

     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main);   

      btnSendSMS = (Button) findViewById(R.id.btnSendSMS); 
      txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo); 
      txtMessage = (EditText) findViewById(R.id.txtMessage); 

      btnSendSMS.setOnClickListener(new View.OnClickListener() 
      { 
       public void onClick(View v) 
       {     
        String phoneNo = txtPhoneNo.getText().toString(); 
        String message = txtMessage.getText().toString();     
        if (phoneNo.length()>0 && message.length()>0)     
         sendSMS(phoneNo, message);     
        else 
         Toast.makeText(getBaseContext(), 
          "Please enter both phone number and message.", 
          Toast.LENGTH_SHORT).show(); 
       } 
      });   
     } 
     private void sendSMS(String phoneNumber, String message) 
     {   
      String SENT = "SMS_SENT"; 
      String DELIVERED = "SMS_DELIVERED"; 

      PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, 
       new Intent(SENT), 0); 

      PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
       new Intent(DELIVERED), 0); 

      //---when the SMS has been sent--- 
      registerReceiver(new BroadcastReceiver(){ 
       @Override 
       public void onReceive(Context arg0, Intent arg1) { 
        switch (getResultCode()) 
        { 
         case Activity.RESULT_OK: 
          Toast.makeText(getBaseContext(), "SMS sent", 
            Toast.LENGTH_SHORT).show(); 
          break; 
         case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
          Toast.makeText(getBaseContext(), "Generic failure", 
            Toast.LENGTH_SHORT).show(); 
          break; 
         case SmsManager.RESULT_ERROR_NO_SERVICE: 
          Toast.makeText(getBaseContext(), "No service", 
            Toast.LENGTH_SHORT).show(); 
          break; 
         case SmsManager.RESULT_ERROR_NULL_PDU: 
          Toast.makeText(getBaseContext(), "Null PDU", 
            Toast.LENGTH_SHORT).show(); 
          break; 
         case SmsManager.RESULT_ERROR_RADIO_OFF: 
          Toast.makeText(getBaseContext(), "Radio off", 
            Toast.LENGTH_SHORT).show(); 
          break; 
        } 
       } 
      }, new IntentFilter(SENT)); 

      //---when the SMS has been delivered--- 
      registerReceiver(new BroadcastReceiver(){ 
       @Override 
       public void onReceive(Context arg0, Intent arg1) { 
        switch (getResultCode()) 
        { 
         case Activity.RESULT_OK: 
          Toast.makeText(getBaseContext(), "SMS delivered", 
            Toast.LENGTH_SHORT).show(); 
          break; 
         case Activity.RESULT_CANCELED: 
          Toast.makeText(getBaseContext(), "SMS not delivered", 
            Toast.LENGTH_SHORT).show(); 
          break;       
        } 
       } 
      }, new IntentFilter(DELIVERED));   

      SmsManager sms = SmsManager.getDefault(); 
      sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);   
     } 

} 

답변

0

당신이 manfest.xml 데 사용하는 활동을 추가 했 receive.java? 그렇게하지 않으면 NULL 포인터 예외가 발생하여 로그 고양이 오류가 발생할 수 있습니다 ...

0

SmsMessage.getOriginatingAddress -이 SMS 메시지의 원래 주소 (보낸 사람)를 반환합니다 (사용할 수없는 경우). sendms() 메서드를 사용하는 경우 .it는 보낸 사람 주소를 null로 전달합니다. sms.sendTextMessage (phoneNumber, null, message, sentPI, deliveredPI);

도 줄을 취소합니다. 브로드 캐스트() 메소드를 호출하십시오. 이는 무언가로 이어질 수 있습니다.

관련 문제