私はアンドロイドプログラミングの初心者で、アプリで問題が発生しました。機能を備えた MediaPlayer アプリケーションをコーディングするつもりです。インテントを使用してストレージからファイルを選択し、そのファイルの再生を開始します。「MediaPlayer.create(context, uri)」メソッドを使用していますが、現在エラーが発生しています
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//openFile();
Button openFile = (Button) this.findViewById(R.id.ButtonOpen);
openFile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent chooseFile;
Intent intent;
chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.setType("file/*");
intent = Intent.createChooser(chooseFile, "Choose a file");
startActivityForResult(intent, ACTIVITY_CHOOSE_FILE);
Uri uri = intent.getData();
initViews(uri);
}
});
}
private void initViews(Uri uri) {
mButtonPlayStop = (Button) findViewById(R.id.ButtonPlayStop);
mButtonPlayStop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonClick();
}
});
mMediaPlayer = MediaPlayer.create(this, uri);
}
private void starPlayProgressUpdater() {
mSeekBar.setProgress(mMediaPlayer.getCurrentPosition());
if (mMediaPlayer.isPlaying()) {
Runnable notification = new Runnable() {
@Override
public void run() {
starPlayProgressUpdater();
}
};
mHandler.postDelayed(notification, 1000);
} else {
mMediaPlayer.pause();
mButtonPlayStop.setText(getString(R.string.play_str));
mSeekBar.setProgress(0);
}
}
private void buttonClick() {
if (mButtonPlayStop.getText() == getString(R.string.play_str)) {
mButtonPlayStop.setText(getString(R.string.pause_str));
try {
mMediaPlayer.start();
starPlayProgressUpdater();
} catch (IllegalStateException e) {
mMediaPlayer.pause();
}
} else {
mButtonPlayStop.setText(getString(R.string.play_str));
mMediaPlayer.pause();
}
}
そして、「mMediaPlayer = MediaPlayer.create(this, uri);」で NullPointerException をスローします。ウリに問題あり。誰かが私を導くことができますか?
Ilango j に感謝します。コードを修正したところ、音楽ファイルを選択して再生できるようになりました。しかし、私の期待はファイルを選択し、再生/一時停止ボタンをクリックした後にのみ再生することです(プログレスバー付き)が、buttonClickで新しいNullPointerExceptionを取得しました
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = (Context) getApplicationContext();
Button openFile = (Button) this.findViewById(R.id.ButtonOpen);
openFile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
initView();
}
});
}
private void initView() {
mButtonPlayStop = (Button) findViewById(R.id.ButtonPlayStop);
mButtonPlayStop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonClick();
}
});
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 10);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RESULT_OK && requestCode == 10) {
Uri uri = data.getData();
mMediaPlayer = MediaPlayer.create(mContext, uri);
mSeekBar = (SeekBar) findViewById(R.id.SeekBar01);
mSeekBar.setMax(mMediaPlayer.getDuration());
mSeekBar.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
seekChange(v);
return false;
}
});
}
}
private void starPlayProgressUpdater() {
mSeekBar.setProgress(mMediaPlayer.getCurrentPosition());
if (mMediaPlayer.isPlaying()) {
Runnable notification = new Runnable() {
@Override
public void run() {
starPlayProgressUpdater();
}
};
mHandler.postDelayed(notification, 1000);
} else {
mMediaPlayer.pause();
mButtonPlayStop.setText(getString(R.string.play_str));
mSeekBar.setProgress(0);
}
}
private void seekChange(View v) {
if (mMediaPlayer.isPlaying()) {
SeekBar sb = (SeekBar) v;
mMediaPlayer.seekTo(sb.getProgress());
}
}
private void buttonClick() {
if (mButtonPlayStop.getText().equals(getString(R.string.play_str))) {
mButtonPlayStop.setText(getString(R.string.pause_str));
try {
mMediaPlayer.start();
starPlayProgressUpdater();
} catch (IllegalStateException e) {
mMediaPlayer.pause();
}
} else {
mButtonPlayStop.setText(getString(R.string.play_str));
mMediaPlayer.pause();
}
}
アドバイスをお願いできますか?