私はラジオストリーミングアプリで作業しており、数分後、バックグラウンドでオーディオが常に停止します。
マニフェスト:
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE"/>
<uses-permission Android:name="Android.permission.WAKE_LOCK"/>
サービスクラス:
public class StreamService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnInfoListener {
private static final String STREAM_URL = "http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-einws";
MediaPlayer mediaPlayer = null;
private WifiManager.WifiLock mWifiLock;
public int onStartCommand(Intent intent, int flags, int startId) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(STREAM_URL);
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnInfoListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setLooping(true);
if (mWifiLock == null) {
mWifiLock = ((WifiManager) Objects.requireNonNull(getApplicationContext().getSystemService(Context.WIFI_SERVICE)))
.createWifiLock(WifiManager.WIFI_MODE_FULL, "mediaplayerlock");
}
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mediaPlayer.prepareAsync();
return START_STICKY;
}
public void onPrepared(MediaPlayer player) {
Log.e(TAG, "Service onPrepared");
mediaPlayer.start();
}
MainActivityでストリームを開始します。
Intent i = new Intent(this, StreamService.class);
i.setAction("play");
startService(i);
デバイスがロックされた状態で数分後、このエラーが発生し、再生が停止します。
W/MediaPlayerNative: info/warning (703, 0)
W/MediaPlayerNative: info/warning (701, 0)
703と701は、オーディオのバッファリングと再生に関連していますが、Wi-Fi接続が良好であっても、毎回すべてを永久に停止します。アプリを開いたままにしておくと永久に機能しますが、数分でアプリを閉じると、このエラーが表示されます。次に、アプリを再度開き、ストリームを停止して再起動する必要があります。
ストリームに関する警告がありますが、コードのすべてが正しいようです:
W/MediaPlayer: Use of stream types is deprecated for operations other than volume control
W/MediaPlayer: See the documentation of setAudioStreamType() for what to use instead with Android.media.AudioAttributes to qualify your playback use case
何か不足していますか?何か案は?
ありがとう!
編集:
ストリームの開始時と703エラーが発生したときにonInfoが呼び出されることがわかりました。
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
Log.e(TAG, "Service onInfo");
return false;
}
私が使用した最近の履歴アプリからアプリがクリアされても、オーディオまたは音楽の再生を継続するために、インターンシップテスト中にアプリを作成しましたAndroidバックグラウンドサービス
あなたはGithubでコードをチェックして、Androidのサービスについていくつかのアイデアを得ることができます