我正在尝试使用
将数据发送到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();
}
}
}
我的应用程序崩溃。
答案 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);
.
.
.
.
.
}
}
我希望这会有所帮助。