2016-03-19 8 views
0

SMSアプリケーションでは、BroadcastReceiverからmainメソッドにStringの値を渡したいと思います。ここでBroadcastReceiverとメインメソッドの間で情報を渡す方法

public class LucesAlarma extends AppCompatActivity { 
 

 
IntentFilter intentFilterLA; 
 

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

 
       final String MENSAJE = intent.getExtras().getString("mensaje"); 
 
       String NUMERODELMENSAJE = intent.getExtras().getString("numero"); 
 
      } 
 
     }; 
 

 
    @Override 
 
     protected void onCreate(Bundle savedInstanceState) 
 

 
     { 
 
    super.onCreate(savedInstanceState); 
 
    setContentView(R.layout.activity_luces_alarma); 
 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
 
    intentFilterLA = new IntentFilter(); 
 
    intentFilterLA.addAction("SMS_RECEIVED_ACTION"); 
 
      //I want to use the String Mensaje from the BroadcastReceiver here 
 
     } 
 

 
@Override 
 
protected void onResume() 
 
{ 
 
    registerReceiver(intentRecieverLA, intentFilterLA); 
 
    super.onResume(); 
 
} 
 

 
@Override 
 
protected void onPause() 
 
{ 
 
    unregisterReceiver(intentRecieverLA); 
 
    super.onPause(); 
 
} 
 

 
}

SMSの受信機のコードが

public class ReceptorSMS extends BroadcastReceiver { 
 
    @Override 
 
    public void onReceive(Context context, Intent intent) 
 
    { 
 
     Bundle bundle = intent.getExtras(); 
 
     SmsMessage[]messages=null; 
 
     String str = ""; 
 
     String num = ""; 
 
     String men = ""; 
 
     if(bundle != null) 
 
     { 
 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
 
      assert pdus != null; 
 
      messages = new SmsMessage[pdus.length]; 
 
      for (int i=0 ; i<messages.length;i++) 
 
      { 
 
       messages[i]=SmsMessage.createFromPdu((byte[])pdus[i]); 
 
       num = messages[i].getDisplayOriginatingAddress(); 
 
       str += "Mensaje de" +messages[i].getOriginatingAddress(); 
 
       str += ":"; 
 
       str += messages[i].getMessageBody(); 
 
       str += "\n"; 
 
       men = messages[i].getMessageBody(); 
 

 
      } 
 
      //   Toast.makeText(context,str,Toast.LENGTH_SHORT).show(); 
 
      Intent broadcastIntent = new Intent(); 
 
      broadcastIntent.setAction("SMS_RECEIVED_ACTION"); 
 
      broadcastIntent.putExtra("sms", str); 
 
      broadcastIntent.putExtra("mensaje", men); 
 
      broadcastIntent.putExtra("numero", num); 
 
      context.sendBroadcast(broadcastIntent); 
 
     } 
 

 

 
    } 
 
}

である私は、メインmethotにその文字列を取得する方法を知りたいください。

+0

でその後

public void onReceive(Context context, Intent intent) {. . . Toast.makeText(context,str,Toast.LENGTH_SHORT).show(); Intent broadcastIntent = new Intent(); broadcastIntent .setClassName("<YOUR PACKAGE NAME>", "<YOUR PACKAGE NAME>.LucesAlarma"); broadcastIntent.setAction("SMS_RECEIVED_ACTION"); broadcastIntent.putExtra("sms", str); broadcastIntent.putExtra("mensaje", men); broadcastIntent.putExtra("numero", num); context.startActivity(broadcastIntent); } 

あなたReceptorSMSクラスでこの

のように行う必要がありますよりも、任意のSMSを受信したときに活動を開始したいと仮定し、 'そのBroadcastReceiver'は 'Activity'が起動して実行されるまでブロードキャストを取得しません。この時点で' onCreate() 'メソッドはすでに完了しています。 –

+0

私は@MikeMに同意します。ブロードキャストレシーバを登録して登録解除する必要があります –

+0

正しい解決策を得るにはもっとコードと情報が必要です@Josue Manuek Pareja Contreras –

答えて

1

私はあなたがonCreate

Intent intent = getIntent(); 
String sms= intent.getStringExtra("sms"); 
String men = intent.getStringExtra("mensaje"); 
String num = intent.getStringExtra("numero"); 
+0

私は、BroadcastReceiver intentRecieverLAのメッセージを受信し、 "onCreate"のインテントを使用せずに、文字列MENSAJEの内容をonCreateに渡したいとします。アスワーに感謝します。 –

関連する問題