私は次のような活動をしています、
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 は含めていませんが、これはシェイク イベントを検出するだけで、次のシェイクまでサンプル サウンドがループ再生されます (はい、かなり面倒です!)。
これは実際には非常にうまく機能しますが、開始コマンドと停止コマンドが実行されたときにstart() mUri is null
orというタグ MediaPlayer を持つ LogCat エントリを取得します。stop() mUri is null
これは私が何か間違ったことをしたと信じ込ませますが、それが何であるかを知ることはできません。また、これはどうやら一般的なエラーではありません。
ここでそれが何を意味するのか、誰にも分かりますか?私が太っていたらごめんなさい - それはまだ私にとって少し混乱しています.
更新(コメントから):私がしたことの1つは、実際のUri(パスから構築された)を与えることでした。その後、同様の警告が表示され、 start() mUri is android.resource://com.joris.soundtest/2130968576
(レベルD)と表示され、今回はEレベルが先行しますUri is android.resource//...
(ドットは同じものを与えます)うり)。これらの LogCat エントリは、デバッグのために単に「情報」である可能性はありますか? Eレベルのものはそのように聞こえません..
ありがとう!-ヨリス。