1

MediaPlayer を使用してラジオ ストリームを再生しています。ストリームを再生するメイン アクティビティをバックグラウンドで実行すると、問題が発生します。

電話がリソースを使いすぎると (たとえば、インストールされているアプリケーションのリストを表示しようとしている間)、ストリームが停止します。リソースを節約するために、Android がストリームをシャットダウンしていると思われます。

これは、開始時にメディアプレーヤーを準備する方法です。

radioPlayer=new MediaPlayer();
radioPlayer.setDataSource(streamLocation); //with a try/catch of course in the full code
radioPlayer.prepareAsync();
radioPlayer.seekTo(0);
radioPlayer.setOnInfoListener(this);
radioPlayer.setOnPreparedListener(new OnPreparedListener(){                 
public void onPrepared(MediaPlayer mp) 
        radioPlayer.start();
});

すべてメインスレッドで実行されます。

4

2 に答える 2

1

Service は、バックグラウンドで実行時間の長い操作を実行できるアプリケーション コンポーネントであり、ユーザー インターフェイスは提供しません。別のアプリケーション コンポーネントがサービスを開始することができ、ユーザーが別のアプリケーションに切り替えた場合でも、サービスはバックグラウンドで実行され続けます。さらに、コンポーネントはサービスにバインドして対話し、プロセス間通信 (IPC) を実行することもできます。たとえば、サービスはネットワーク トランザクションの処理、音楽の再生、ファイル I/O の実行、またはコンテンツ プロバイダーとのやり取りをすべてバックグラウンドで行う場合があります。

深く潜る

于 2013-03-06T19:06:40.373 に答える
0

アクティビティ内ではなく、サービスとしてメディア プレーヤーを実行するようにしてください。そうすれば、アプリがサスペンド状態になったときに、メディアプレーヤーをバックグラウンドで再生できます。ユーザーがアプリからフォーカスを外すと (たとえば、電話がかかってきた場合)、アクティビティは一時停止または破棄されます。ただし、サービスは、Android OS で実行されているすべてのものと一緒にバックグラウンドで実行されるように設計されています。

サービス

于 2013-03-06T19:03:07.883 に答える