2016-09-22 6 views
1

나는 가속도계를 사용하는 앱을 만들고 있는데, 흔들림을 감지하면 원시 폴더에서 소리가납니다. 내 문제는 사운드가 끝나지 않고 새로운 쉐이크 모션이 감지되면 사운드가 다시 트리거되고 이전 사운드가 취소된다는 것입니다. 새 사운드 파일을 재생하려면 먼저 이전 사운드 파일을 완성해야합니다. 어떻게이 문제를 해결할 수 있습니까? 센서 또는 연극반에서해야합니까? 잔유를 가지고 미디어 플레이어를 시작하는 클래스입니다.다시 시작하기 전에 안드로이드 미디어 플레이어를 완료하십시오.

public void Play(final int resid) { 

    Log.d(TAG, "i Play(med resid)"); 
    if (mp != null && mp.isPlaying()) { //ta bort isplaying 
     Log.v(TAG, "Reset"); 
     mp.reset(); 
     Log.v(TAG, "Release"); 
     mp.release(); 
    } 
    if (resid == 0) { 
     Toast.makeText(this, "Choose an instrument", Toast.LENGTH_SHORT).show(); 

    } else { 

     Log.d(TAG,"Now playing!"); 
     mp = MediaPlayer.create(getApplicationContext(), resid); 
     mp.start(); 
     int duration = mp.getDuration(); 
     Log.v(TAG, "Length: " + duration); 
    } 

} 

이 다시 시작되는 센서

public void TiltingSensor(SensorEvent event, int resid) { 
    Sensor mSensor = event.sensor; 
    if (mSensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
     float x_axis = event.values[0]; 
     float y_axis = event.values[1]; 

     if ((x_axis < 9.80 && x_axis > 0.50) && (y_axis > -9 && y_axis < 0)){ 
      //Log.d("Angles", Float.toString(x_axis) + " Y: " + Float.toString(y_axis)); 
      Play(resid); 
     } 
    } 
} 

답변

0

그것은 당신의 중 하나입니다 플레이어 :

if (mp != null && mp.isPlaying()) { 
    Log.v(TAG, "Already playing"); 
    return; 
} else if (mp != null) { // it's better to release player 
    Log.v(TAG, "Release"); 
    mp.release(); 
} 
0

당신이 원하는 경우

if (mp != null && mp.isPlaying()) { //ta bort isplaying 
    Log.v(TAG, "Reset"); 
    mp.reset(); 
    Log.v(TAG, "Release"); 
    mp.release(); 
} 

가 코드를 변경해보십시오 음악을 두 번째로 시작할 때 m 처음 재생하는 동안 미디어 플레이어가 감지 된 다음 미디어 플레이어가 isPlaying()에 대해 true를 반환하면 반환하기 전에 Play()에서 증분 참조 횟수를 사용합니다. 그런 다음 oncompletionListener()에서 참조 횟수를 감소시키고 Play()를 다시 호출하라는 메시지를 게시하십시오.