簡體   English   中英

如何在媒體播放器准備服務時添加加載對話框 (Android)

[英]How to add loading dialog while media player is in preparing in service (Android)

我構建了應用程序來播放來自互聯網的音頻,我使用服務在后台播放音頻,問題是如何在媒體播放器准備服務(后台)定位時顯示加載對話框,請使用我的代碼。

活動

package com.uqifm.onlineradio;
.......
public class MainActivity extends AppCompatActivity {

    Button b_play;
    Boolean started = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b_play = (Button) findViewById(R.id.b_play);

        b_play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(started){
                    started = false;
                    stopService(new Intent(MainActivity.this,MyService.class));
                    b_play.setText("PLAY");
                }else{
                    started = true;
                    startService(new Intent(MainActivity.this,MyService.class));
                    b_play.setText("STOP");
                }
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        stopService(new Intent(MainActivity.this,MyService.class));
    }
}

服務

package com.uqifm.onlineradio;
....................
public class MyService extends Service {

    MediaPlayer mediaPlayer;
    String stream = "http://xxxxx:36365";

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
            mediaPlayer.setDataSource(stream);
            mediaPlayer.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        mediaPlayer.start();
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        mediaPlayer.release();
    }
}

注冊廣播,在啟動服務之前啟動ProgressDialog 然后等待廣播。 廣播后,隱藏對話框。 請參閱此線程中的示例。 將數據從服務發送回我的活動

在 xml 中放置一個 ProgressDialog 並根據您的要求設置可見性。 使用接口與服務通信。

您可以使用Broadcast或嘗試更容易的EventBus 您可以使用EventBus從服務發布事件,並在MainActivity接收廣播並更新進度對話框。
請點擊鏈接。

也許是這樣的:

    fun playAudio(audioUrl: String){
    showProgressBar()
    var mediaPlayer: MediaPlayer? = MediaPlayer().apply {
        setAudioStreamType(AudioManager.STREAM_MUSIC)
        setDataSource(audioUrl)
        prepareAsync() // might take long! (for buffering, etc)

    }
    mediaPlayer?.setOnPreparedListener {
        hideProgressBar()
        it.start()
    } 
    mediaPlayer?.setOnCompletionListener {
        mediaPlayer.release()
    } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM