ProgressDialog.dismiss
ミュージック サービスから設定する必要があります。AsyncTask を設定しようとしました
final class TheTask extends AsyncTask<Void, Void, Void>{
ProgressDialog dialog = ProgressDialog.show(SomafmActivity.this, "",
"Loading. Please wait...", true);
@Override
protected void onPreExecute() {
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
final Intent i = new Intent(MusicService.ACTION_URL);
Uri uri = Uri.parse("http://sfstream1.somafm.com:8880");
i.setData(uri);
startService(i);
return null;
}
@Override
protected void onPostExecute(Void result) {
dialog.dismiss();
}
それは正常に機能しますが、 startService(i) 呼び出しの開始時にダイアログを閉じるため、ダイアログはすぐに消えます。それで、MusicService サービスから ProgressDialog にアクセスしようとしました。
私のメインアクティビティの ProgressDialog 宣言:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.somafm);
ProgressDialog dialog = ProgressDialog.show(SomafmActivity.this, "",
"Loading. Please wait...", true);
}
そして私のMusicServiceで:
public void onPrepared(MediaPlayer player) {
// The media player is done preparing. That means we can start playing!
mState = State.Playing;
updateNotification(mSongTitle + " (playing)");
configAndStartMediaPlayer();
ProgressDialog dialog = (ProgressDialog) SomafmActivity.dialog; //This line I believe is wrong
dialog.dismiss();
}
しかし、LogCat で NullPointerException が発生しています。ストリームが読み込まれて再生が開始されるまでエラーが発生しないため、この場所からダイアログを閉じるとうまくいくと確信しています。
私の質問は、音楽サービスから ProgressDialog を適切に参照するにはどうすればよいですか?