2016-09-05 77 views
0

我知道這是一個非常普遍的問題。但是,儘管我的邏輯是正確的,但我仍然無法在我的應用程序中播放聲音,但使用了MediaPlayer類。目前,我在我的應用程序中具有抖動檢測功能。每當設備被震動時,它都會發出聲音。下面是我的代碼:Android MediaPlayer ::問題

public class MainActivity extends AppCompatActivity { 

private SensorManager mSensorManager; 
private Sensor mAccelerometer; 
private ShakeDetector mShakeDetector; 
private SoundManager mSoundManager; 
private TextView xText; 
private Context context; 
private AudioPool ap; 
int id1,id2; 
File directory; 

MediaPlayer player, mPlayer; 
AudioCollective ac; 
Lagu la; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    xText = (TextView)findViewById(R.id.xText); 

    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    mShakeDetector = new ShakeDetector(); 

    la = new Lagu(); 
    la.initLagu(MainActivity.this); 

    mShakeDetector.setOnShakeListener(new ShakeDetector.OnShakeListener() { 

     @Override 
     public void onShake(int count) { 

      la.playLagu(); 
      xText.setText("Shake:"+count); 

     } 
    }); 
} 

public class Lagu { 
MediaPlayer mPlayer; 
public Lagu(){ 
    mPlayer = new MediaPlayer(); 
} 
public void initLagu(Context theContext){ 
    mPlayer.create(theContext, R.raw.na); 
} 
public void playLagu(){ 
    mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 
} 

}

的問題是應用每個手機搖晃時間不播放聲音。應用程序甚至不會播放聲音。 FYI,歌曲的格式是MP3。有人請告訴我我的應用程序出了什麼問題?您的幫助將不勝感激!

+0

檢查日誌中的警告或錯誤時,有時這些類可以在設備間表現不同。 – Pievis

+0

嗨,日誌中沒有顯示錯誤或警告。這意味着邏輯是正確的。但我仍然不知道它爲什麼不播放聲音。 – JackPowell

回答

1

documentationMediaplayer.create()

方便的方法來創建一個給定的資源ID的MediaPlayer。在成功時,prepare()已經被調用,不能再被調用。

注:該方法Mediaplayer.create()是返回一個靜態方法準備使用的Mediaplayer

所以,你需要的返回值分配給您的MPLAYER 你不需要任何OnPreparedListener - 只需撥打start()

public class Lagu { 

MediaPlayer mPlayer; 

public Lagu(){ 
    // do nothing or call initLagu() here 
    // in this case skip the method call from the Activity's onCreate() 
} 

public void initLagu(Context theContext){ 
    mPlayer = Mediaplayer.create(theContext, R.raw.na); 
} 

public void playLagu(){ 

    mPlayer.start(); 
} 

}

+0

嗨,謝謝你的回覆。我對你的答案有些懷疑。我想在initLagu()實現OnPreparedListener?並在playLagu()創建()? – JackPowell

+0

@傑克鮑威爾 - 謝謝你的提問。請看看我編輯的答案 - 我忽略了Mediaplayer.create()是一個靜態方法。我的不好:( – 0X0nosugar

+0

解決了這個問題,謝謝! – JackPowell