2014-01-14 37 views
0

將數據發送到廣播接收器,我嘗試將數據發送到使用從MainActivity

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

你可以發佈你的onReceive方法嗎?你有沒有在清單中註冊你的廣播接收機? –

+0

我更新了帖子。謝謝 – Merv

+0

順便說一句你爲什麼要發送廣播到SMSReceiver?你的目標是簡單地發送字符串「標籤」到廣播? –

回答

0

做這樣

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

和意圖也應該是這樣的

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

我這樣做,但沒有結果。謝謝 – Merv

+0

你在哪寫這段代碼String cp = bundle.getStringExtra(「label」);我沒有找到任何錯誤? –

+0

我剛剛更新我的代碼。按照我所有的接收請 – Merv

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> 

發送廣播時,通常我使用intent過濾器。

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

由於您的接收器通常是用於SMS PDU或SMS數據會因爲你要發送一個正常的廣播而不是SMS一個正常空和應用程序會崩潰。因此,使用意圖過濾器來獲取標籤數據。

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); 

     . 
     . 
     . 
     . 
     . 
    } 
} 

我希望這會有所幫助。

+0

什麼是當你說PDU? – JPerk

相關問題