安卓系统总是在后台停止音频流

问题描述 投票:1回答:1

我正在做一个电台流媒体应用,音频总是在后台时停止,几分钟后。

Manifest:

<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与缓冲和播放音频有关 但它每次都会停止一切,即使是在良好的wifi连接情况下 如果你一直打开应用程序,一切都能正常工作,但如果你在几分钟内关闭应用程序,这个错误就会出现。然后你必须重新打开应用程序,停止并重新启动流。

有一个关于流的警告,但代码上的一切似乎都是正确的。

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

我是不是漏了什么?有什么想法吗?

谢谢!

EDIT:

我发现onInfo在流媒体开始时被调用,而当我收到703错误时也被调用。

@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
    Log.e(TAG, "Service onInfo");
    return false;
}
android android-studio android-mediaplayer audio-streaming
1个回答
4
投票

当你的应用程序进入后台时,我将停止后短。要想继续播放音频,你必须启动服务,作为一个 前台服务.

Manifest:

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

活动:

startForegroundService(i)

服务。

onCreate() {
    super.onCreate()
    startForeground(ID, createNotification())
}

0
投票

我在实习测试期间创建了一个应用程序,以保持播放音频或音乐,即使该应用程序从最近的历史应用程序中清除,我在那里使用Android后台服务。

你可以在Github上查看代码,在那里你会对android中的服务有一些了解。

https:/github.compratikKatariaInternshipTest。

© www.soinside.com 2019 - 2024. All rights reserved.