从MainActivity向广播接收器发送数据

时间:2014-01-14 10:04:19

标签: android broadcastreceiver

我正在尝试使用

将数据发送到Broadcast班级

在我的MainActivity

String stop = "0";
Intent intent = new Intent(getApplicationContext(), SMSReceiver.class);
intent.putExtra("label",stop);
sendBroadcast(intent);

在我的Broadcast班级

public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    Object[] messages = (Object[]) bundle.get("pdus");
    SmsMessage[] sms = new SmsMessage[messages.length];
    final MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.son1);

    // Creation de messages
    for (int i=0; i < messages.length; i++) {
        sms[i] = SmsMessage.createFromPdu((byte[]) messages[i]);
    }
    for (SmsMessage msg : sms) {

        // Vérifie
        if (TextUtils.equals(msg.getOriginatingAddress(), ewitnumber)) {
            //Toast.makeText(context, "" + msg.getMessageBody(), Toast.LENGTH_SHORT).show();
            Intent i = new Intent(context, DisplayActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);

            String cp = bundle.getString("label");
            Log.d("SMS", ""+cp);

            //music du message
            AudioManager mAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
            mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);

            Runnable stopPlayerTask = new Runnable(){
                @Override
                public void run() {
                    mPlayer.pause();
                }
            };

            if(mPlayer.isPlaying()){
                mPlayer.pause();
            }else{
            mPlayer.seekTo(startime);
            mPlayer.start();
            mPlayer.setLooping(true);
            }
            Handler handler = new Handler();
            handler.postDelayed(stopPlayerTask, endtime);

            //Efface le message automatiquement
            abortBroadcast();
        }
    }

}

我的应用程序崩溃。

2 个答案:

答案 0 :(得分:0)

这样做

String cp = bundle.getStringExtra("label");

和Intent也应该是这样的

Intent intent = new Intent(Yourtivity.this, SMSReceiver.class);

答案 1 :(得分:0)

确保您的接收器已在您的清单中注册,它看起来像这样。

<receiver android:name="your.package.SMSReceiver"> 
     <intent-filter> 
          <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
     <intent-filter> 
          <action android:name="SMSReceiver.action.label" /> 
     </intent-filter> 
</receiver>

通常在发送广播时我会使用意图过滤器。

String stop = "0";
Intent intent = new Intent("SMSReceiver.action.label");
intent.putExtra("label",stop);
sendBroadcast(intent);

由于您的接收器通常用于短信PDU或短信数据通常会为空并且应用程序将崩溃,因为您发送的是普通广播而不是短信广播。因此,使用intent过滤器来获取标签数据。

public void onReceive(Context context, Intent intent) {

    //get the action of the intent
    String action = intent.getAction();

    if(action.equals("SMSReceiver.action.label")){

         String stop = intent.getStringExtra("label");

         //do something

    } else {

        Bundle bundle = intent.getExtras();
        Object[] messages = (Object[]) bundle.get("pdus");
        SmsMessage[] sms = new SmsMessage[messages.length];
        final MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.son1);

        .
        .
        .
        .
        .
    }
}

我希望这会有所帮助。