如何在服务和活动之间发送/接收广播

3 android

我需要从SmsReceiverClass 向 My Main_Activity 发送消息,但无法执行此操作。我非常尝试并搜索但是......

这是我的代码

短信接收器.java

public class SmsReceiver extends BroadcastReceiver {

    // Get the object of SmsManager
    final SmsManager sms = SmsManager.getDefault();

    public void onReceive(Context context, Intent intent) {

        // Retrieves a map of extended data from the intent.
        final Bundle 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();
                    Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);

                    Intent intent1=new Intent(context, MainActivity.class);

                    intent1.putExtra("m",message);
                    context.sendBroadcast(intent1);
                } // end for loop
            } // bundle is null

        } catch (Exception e) {
            Log.e("SmsReceiver", "Exception smsReceiver" +e);

        }

    }    
}
Run Code Online (Sandbox Code Playgroud)

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
               final EditText intext=(EditText) findViewById(R.id.editText2Inputtext);

          BroadcastReceiver mysms=new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                String sms=arg1.getExtras().getString("m");
                intext.setText(sms);

            }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

xtr*_*xtr 5

您发送和注册广播接收器的代码不正确。发送广播:

Intent intent = new Intent("your_action_name");
intent.putExtra(....);
sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

收到:

BroadcastReceiver mysms=new BroadcastReceiver() {
      @Override
      public void onReceive(Context arg0, Intent arg1) {
          String sms=arg1.getExtras().getString("m");
          intext.setText(sms);

      }
};
registerReceiver(mysms, new IntentFilter("your_action_name"));
Run Code Online (Sandbox Code Playgroud)

并记住在销毁您的活动时注销。