2014-01-20 4 views
0

내 수업 SMSReceiver에서 메시지를 받으면 디스플레이 활동에서 소리가 나는 시작을 재생하고 싶습니다. 문제는 사운드를 수신하는 각 메시지가 재생된다는 것입니다. 그러나 2 개의 메시지를 동시에 수신 한 경우 사운드가 혼합됩니다. 다음Broadcastreceiver 및 SMSReceiver

public class SMSReceiver extends BroadcastReceiver { 
static String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 

@Override 
public void onReceive(Context context, Intent intent) { 

    if(intent.getAction().equals(SMSReceiver.SMS_RECEIVED)){ 
     Bundle bundle = intent.getExtras(); 
     Object[] messages = (Object[]) bundle.get("pdus"); 
     SmsMessage[] sms = new SmsMessage[messages.length]; 
     for (int i=0; i < messages.length; i++) { 
      sms[i] = SmsMessage.createFromPdu((byte[]) messages[i]); 
     } 
     String sms2 = new String(); 
     for (SmsMessage msg : sms) { 
      if (TextUtils.equals(msg.getOriginatingAddress(), number)) { 
       Intent i = new Intent(context, DisplayActivity.class); 
       sms2 = msg.getMessageBody(); 
       i.putExtra("SMS",sms2); 
       context.startActivity(i); 
       abortBroadcast(); 
      } 
     } 
    } 
} 
} 


public class DisplayActivity extends Activity { 

MessageBDD messagebdd = new MessageBDD(this); 
Message message = new Message(); 

int delay = 0; 
boolean isFirstTime = true; 
int period = 60000; 
static String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 
private IntentFilter mIntentFilter; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.display); 


    final MediaPlayer mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.son1); 

    AudioManager mAudioManager = (AudioManager)getApplication().getSystemService(Context.AUDIO_SERVICE); 


     mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); 

     Timer timer = new Timer(); 
      timer.scheduleAtFixedRate(new TimerTask() { 
      public void run() { 
       if (isFirstTime) { 
       isFirstTime = false; 
       mPlayer.start(); 
       } 
       else{ 
        mPlayer.seekTo(0); 
        mPlayer.start(); 
       } 
      } 
      }, delay, period); 

    /*************Sauvegarde des messages*****************************/ 
    Bundle extra = getIntent().getExtras(); 
    String sms = extra.getString("SMS"); 
    messagebdd.Open(); 
    message.setContenu(sms); 
    messagebdd.insertMessage(message); 
    messagebdd.Close(); 


    /******************Alerte de stop sonnerie**********************/ 
    AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
    alertDialog.setTitle("Message"); 
    alertDialog.setMessage("Stopper la notification?"); 

    alertDialog.setButton("STOP", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
     mPlayer.release(); 
     finish(); 
    } 
    }); 
    alertDialog.show(); 
} 
} 



public class MyService extends Service { 
private static final String number = "15555215556"; 
int delay = 0; 
boolean isFirstTime = true; 
int period = 60000; 
final MediaPlayer mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.son1); 

private final BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if(action.equals("android.provider.Telephony.SMS_RECEIVED")){ 
      AudioManager mAudioManager = (AudioManager)getApplication().getSystemService(Context.AUDIO_SERVICE); 
      mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); 

         mPlayer.start(); 

      } 
     } 
    }; 

    @Override 
     public void onCreate() { 
     super.onCreate(); 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 
     registerReceiver(receiver, filter); 
     } 

    public void onStart(Intent intent, int startId) {  
      super.onStart(intent, startId); 

     } 

    public void onDestroy() { 
      super.onDestroy(); 
      unregisterReceiver(receiver); 
     } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
    } 
+2

코드를 입력하십시오. –

+0

/질문이 명확하지 않습니다. 무슨 일이 일어나고, 너는 무엇을 원하는거야 ?? –

+0

@Andrey : 마지막 벨 울림 시간을 확인하고 다가오는 것이 울려 야하는지 여부에 따라 조건을 추가하십시오. – Vaibs

답변

1

하는 모든 MediaPlayer를의 또 다른 싱글 톤 클래스의 작업과 음악을 재생하는 방법 플레이를 호출, 내 코드입니다. mediaPlayer.isPlaying()이 true인지 확인한 다음 음악을 재생하지 마십시오. 도움이되기를 바랍니다.

+0

개입 해 주셔서 감사합니다. 노래를 포함하는 디스플레이 활동 클래스를 시작하는 브로드 캐스트 클래스가 있기 전에 내가 뭘하는지. 그러나 문제는 새로운 인스턴스가 SMS를 수신 할 때마다 시작되고 현재 미디어 플레이어를 확인할 때 정확히 알지 못한다는 것입니다. – Andrey

+0

예. 요점을 얻고 있습니다. 각 리셉션에서 새로운 활동이 열리므로 클래스를 만들어야 AudioHelper가됩니다. 싱글 톤 및 모든 작업 수행 - 미디어 플레이어 언로드 및 음악 재생 ... 그래서 활동이 다시 시작될 때 싱글 톤과 동일한 객체를 얻고 확인할 수 있습니다 .Playing() –

+0

감사합니다. 나는 단지 봉사로 그 일을한다. http://stackoverflow.com/questions/21239419/stop-all-media-player-rinning-in-my-android-device를보십시오. 부디. 감사 – Andrey

관련 문제