0

独自のクラスを持ち、Mediaplayer を使用して HTTP に接続する MP3 再生サービスを使用しました。PlayerActivity に渡す、前のアクティビティで選択した URL のいずれかを再生する必要があります。

私はこの方法で Service を作成しますPlayerActivity onCreate:

         startService(new Intent(this, PlayerService.class));
         Intent connectionIntent = new Intent(this, PlayerService.class);
         bindService(connectionIntent, mp3PlayerServiceConnection, Context.BIND_AUTO_CREATE);

これは、最初に選択された URL 起動です。UI をブロックしないように、新しいスレッドで Mediaplayer 呼び出しを起動します (呼び出しは単独で行わActivityPlayerれます)。

private ServiceConnection mp3PlayerServiceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName arg0, IBinder binder) {
        mp3Service = ((LocalBinder) binder).getService();

        Thread t = new Thread() {
        public void run() {

            mp3Service.playSong(getApplicationContext(),url);

        }
        };

        t.start();


    }

    @Override
    public void onServiceDisconnected(ComponentName arg0) {

    }
 };

問題は、ユーザーがこのアクティビティを破棄し、メニューに移動して新しい URL を選択したときに、このサービスのスレッドに新しい URL を渡す方法です。新しいストリームは同じスレッドで再生する必要がありますが、[戻る] ボタンでホームに戻り、アプリを再度起動すると、2 つの URL が同時に再生される状況がありました。たぶん、新しいThread()宣言の原因。

では、アクティビティが URL を使用して作成する場合、その URL をサービスのスレッドに渡す方法は、古い URL の場合は何も起こらず、新しい URL の場合、プレーヤーは新しい URL に切り替えますが、2 つのストリームを一緒に再生しませんか?

4

1 に答える 1