我有一個活動,看起來像,的MediaPlayer的start()/停止()穆裏爲空
public class TestActivity extends Activity {
private SensorManager mSensorManager;
private ShakeEventListener mSensorListener;
private MediaPlayer mPlayer;
private boolean mIsPlaying;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.testsound);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorListener = new ShakeEventListener();
mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {
@Override
public void onShake() {
toggleSound();
}
});
}
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(mSensorListener,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(mSensorListener);
stopSound();
}
protected void toggleSound() {
if (!mIsPlaying) {
startSound();
} else {
stopSound();
}
}
protected void startSound() {
if (mPlayer == null)
{
mPlayer = MediaPlayer.create(TestActivity.this, R.raw.test);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setLooping(true);
mPlayer.start();
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
stopSound();
}
});
mIsPlaying = true;
}
}
protected void stopSound() {
if (mPlayer != null) {
if (mPlayer.isPlaying())
{
mPlayer.stop();
}
mPlayer.release();
mPlayer = null;
}
mIsPlaying = false;
}
}
我知道這可能不是做的最好的方式,但我剛剛開始使用一些隨機測試。我沒有包含ShakeEventListener,但是這幾乎只是檢測一個搖動事件,在循環中播放一個示例聲音(是的,這非常煩人!),直到下一次搖晃。
事實上,這確實工作得很好,除非執行啓動和停止命令時獲得帶有標籤MediaPlayer的LogCat條目,該條目表示執行start() mUri is null
或stop() mUri is null
。這讓我相信我做錯了什麼,但是我無法找到它是什麼,當我谷歌一點時,這也不是一個流行的錯誤。
會有人知道這裏的含義嗎?對不起,如果我很厚 - 這對我來說仍然有點混亂。
更新(從評論):我做的一件事是給它一個實際的Uri(從路徑建成),然後它帶有一個類似的警告,現在說start() mUri is android.resource://com.joris.soundtest/2130968576
(D級)水平Uri is android.resource//...
(點給相同的uri)。這些LogCat條目有可能只是'提供信息',用於調試? E級的人不會聽起來像這樣..
謝謝! -Joris。
嘗試通過上下文的startSound方法,如[這裏](HTTP://計算器.com/questions/12154951/android-mediaplayer-create) – Peshal 2013-05-01 00:57:33
不幸的是,這並沒有改變任何LogCat輸出。我做的一件事是給它一個實際的Uri(從路徑構建),然後它帶有類似的警告,現在說'start()mUri是android.resource:// com.joris.soundtest/2130968576'(D級),在這個時間之前由一個E級別的Uri是android.resource // ...(點給出相同的uri)。這些LogCat條目有可能只是'提供信息',用於調試? – 2013-05-01 08:41:19