2016-07-02 8 views
1

私はonReceiveメソッドの範囲でphoneNoを認識したいと考えています。私は何をする必要がありますか?私はこのようにそれを宣言すると、それを行うだろうと思ったが、何の喜び:ブロードキャストレシーバーで文字列が認識されないのはなぜですか?SMSコードを送信してください

public class MainActivity extends Activity { 
    Button sendBtn; 
    EditText txtphoneNo; 
    String phoneNo; 

// register a broadcast receiver 
    private BroadcastReceiver receiver; 

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

     sendBtn = (Button) findViewById(R.id.btnSendSMS); 
     txtphoneNo = (EditText) findViewById(R.id.editText); 
     phoneNo = txtphoneNo.getText().toString(); etc etc.... 

現時点では私のコードは以下のように見えるん。放送受信機は、私がlogcatに印刷したい受信したSMSを検出した場合:

 System.out.println(origNumber); 
     System.out.println(phoneNo); 

をしかし、私は唯一のsendSMSmessageの範囲で、phoneNo活動を通じて認識することはできません。

public class MainActivity extends Activity { 
    Button sendBtn; 
    EditText txtphoneNo; 
    EditText txtMessage; 

// register a broadcast receiver 
    private BroadcastReceiver receiver; 

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

     sendBtn = (Button) findViewById(R.id.btnSendSMS); 
     txtphoneNo = (EditText) findViewById(R.id.editText); 
     txtMessage = (EditText) findViewById(R.id.editText2); 

     sendBtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       sendSMSMessage(); 
      } 
     }); 

     IntentFilter filter = new IntentFilter(); 
//  the thing we're looking out for is received SMSs 
     filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 

     receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) 

      { 
       //do something based on the intent's action 

       Bundle extras = intent.getExtras(); 

       if (extras == null) 
        return; 

       Object[] pdus = (Object[]) extras.get("pdus"); 
       SmsMessage msg = SmsMessage.createFromPdu((byte[]) pdus[0]); 
       String origNumber = msg.getOriginatingAddress(); 

       System.out.println(origNumber); 
//    I want to print phoneNo here!!!! 
//    System.out.println(phoneNo); 

      } 
     }; 
     registerReceiver(receiver, filter); 
    } 



    protected void sendSMSMessage() { 
     Log.i("Send SMS", ""); 
     String phoneNo = txtphoneNo.getText().toString(); 
     String message = txtMessage.getText().toString(); 

     try { 
      SmsManager smsManager = SmsManager.getDefault(); 
      smsManager.sendTextMessage(phoneNo, null, message, null, null); 
      Toast.makeText(getApplicationContext(), "SMS sent.", Toast.LENGTH_LONG).show(); 
     } 

     catch (Exception e) { 
      Toast.makeText(getApplicationContext(), "SMS faild, please try again.", Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void onDestroy() { 
     if (receiver != null) { 
      unregisterReceiver(receiver); 
      receiver = null; 
     } 
     super.onDestroy(); 
    } 

} 

答えて

1

問題は、あなたがsendSMSMessage()のローカル変数としてphoneNoを宣言しているので、それはその方法の外にはアクセスできません。

代わりにインスタンス変数として宣言する必要があります。

このような何か:

public class MainActivity extends Activity { 
    Button sendBtn; 
    EditText txtphoneNo; 
    EditText txtMessage; 

    String phoneNo; 

    private BroadcastReceiver receiver; 

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

     sendBtn = (Button) findViewById(R.id.btnSendSMS); 
     txtphoneNo = (EditText) findViewById(R.id.editText); 
     txtMessage = (EditText) findViewById(R.id.editText2); 

     sendBtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       sendSMSMessage(); 
      } 
     }); 

     IntentFilter filter = new IntentFilter(); 
//  the thing we're looking out for is received SMSs 
     filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 

     receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) 

      { 
       Bundle extras = intent.getExtras(); 

       if (extras == null) 
        return; 

       Object[] pdus = (Object[]) extras.get("pdus"); 
       SmsMessage msg = SmsMessage.createFromPdu((byte[]) pdus[0]); 
       String origNumber = msg.getOriginatingAddress(); 

       System.out.println(origNumber); 
       if(phoneNo != null) { 
        System.out.println(phoneNo); 
       } 

      } 
     }; 
     registerReceiver(receiver, filter); 
    } 



    protected void sendSMSMessage() { 
     Log.i("Send SMS", ""); 
     phoneNo = txtphoneNo.getText().toString(); 
     String message = txtMessage.getText().toString(); 

     try { 
      SmsManager smsManager = SmsManager.getDefault(); 
      smsManager.sendTextMessage(phoneNo, null, message, null, null); 
      Toast.makeText(getApplicationContext(), "SMS sent.", Toast.LENGTH_LONG).show(); 
     } 

     catch (Exception e) { 
      Toast.makeText(getApplicationContext(), "SMS faild, please try again.", Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void onDestroy() { 
     if (receiver != null) { 
      unregisterReceiver(receiver); 
      receiver = null; 
     } 
     super.onDestroy(); 
    } 
} 
+0

ハ。私はこの方法で試したと思った。いずれにせよ、あなたのコードをコピーして貼り付けて、今はうまくいくようです。 – CHarris

関連する問題