2012-08-09 6 views
0

SMS 알림을 개발하고 싶습니다. 그 일은 SMS가 활동의 텍스트 박스를 수신하면 "SMS 수신"텍스트로 변경됩니다. SMS가 성공적으로 전송되고 있지만 BroadCastReceiver가 작동하지 않는 경우 도움을 요청하십시오.android BroadCastReceiver가 활동 내에서 작동하지 않습니다.

내 코드 :

package com.shahid.todolist; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.SmsManager; 
import android.telephony.SmsMessage; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

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

     /* 
     * SmsManager smsManager = SmsManager.getDefault(); 
     * 
     * String sendTo = "03129912287"; String myMessage = 
     * "Android supports programmatic SMS messaging!"; 
     * smsManager.sendTextMessage(sendTo, null, myMessage, null, null); 
     */ 

     final EditText phoneNo = (EditText) findViewById(R.id.phoneNo); 
     final TextView display = (TextView) findViewById(R.id.txtDisplay); 
     Button buttonOne = (Button) findViewById(R.id.button1); 
     buttonOne.setOnClickListener(new Button.OnClickListener() { 
      public void onClick(View v) { 
       SmsManager smsManager = SmsManager.getDefault(); 
       display.setText("Sending SMS..."); 
       String sendTo = phoneNo.getText().toString(); 
       String myMessage = "This is Shahid from Android"; 
       smsManager.sendTextMessage(sendTo, null, myMessage, null, null); 
      } 
     }); 

     // --- 
     final BroadcastReceiver receiver = new BroadcastReceiver() { 

      private static final String queryString = "@echo "; 
      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)) { 
        display.setText("SMS Received"); 
       } 
      } 
     }; 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 
+2

매니페스트에 수신자를 등록해야합니다. – Akram

+0

브로드 캐스트 리시버를 동적 및 정적 (androidmanifest.xml)에 등록하고 SMS 의도를위한 인 텐트 필터를 설정해야합니다. – Yahor10

+0

화나게하다? –

답변

1

이 활동 내에있을 때 당신은 당신의 브로드 캐스트를 등록해야합니다.

@Override 
    protected void onResume() { 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(BroadcastReceiver.SMS_RECEIVED); // Provide you intent filter for message received. 
     registerReceiver(receiver, filter); 

     super.onResume(); 
    } 

    @Override 
    protected void onPause() { 
     unregisterReceiver(receiver); 
     super.onPause(); 
    } 
+0

SendBroadcast 무엇입니까 ??? –

+0

@GunahGaar : 업데이트 된 답변을 확인하십시오. SendBroadcast는 내 의도 필터를 선언 한 광산 클래스 –

+0

미안, 여기서 수신자는 무엇입니까? –

0

사용이 코드 : 경우

buttonOne.setOnClickListener(new Button.OnClickListener() { 
      public void onClick(View v) { 

       display.setText("Sending SMS..."); 
       String sendTo = phoneNo.getText().toString(); 
       String myMessage = "This is Shahid from Android"; 
       sendSMS(sendTo , myMessage); 
      } 
     }); 



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(){ 
      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(); 
         display.setText("SMS Received"); 

         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

PendingIntent.getBroadcast에 디자인 타임 오류가 있습니다 (this, 0, 새로운 의도 (DELIVERED), 0); –

+0

이 코드를 사용하셨습니까? 나를 위해 그것은 잘 작동합니다. 너의 클래스를 시도해.이 대신에. – Manikandan

0

이 내 경우에는 문제가 내 텍스트의 괄호와 같은 특수 문자를 사용하고 있었다이었다, 사람을 도움이됩니다. 해당 문자를 제거하면 작동을 시작합니다.

관련 문제