Acquire wifi lock if media file is being streamed
This commit is contained in:
parent
df92bd98ab
commit
640cdad1fe
@ -4,6 +4,7 @@ import android.content.ComponentName;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.media.RemoteControlClient;
|
import android.media.RemoteControlClient;
|
||||||
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@ -65,6 +66,11 @@ public class PlaybackServiceMediaPlayer {
|
|||||||
|
|
||||||
private final ThreadPoolExecutor executor;
|
private final ThreadPoolExecutor executor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A wifi-lock that is acquired if the media file is being streamed.
|
||||||
|
*/
|
||||||
|
private WifiManager.WifiLock wifiLock;
|
||||||
|
|
||||||
public PlaybackServiceMediaPlayer(Context context, PSMPCallback callback) {
|
public PlaybackServiceMediaPlayer(Context context, PSMPCallback callback) {
|
||||||
Validate.notNull(context);
|
Validate.notNull(context);
|
||||||
Validate.notNull(callback);
|
Validate.notNull(callback);
|
||||||
@ -229,7 +235,7 @@ public class PlaybackServiceMediaPlayer {
|
|||||||
audioFocusChangeListener, AudioManager.STREAM_MUSIC,
|
audioFocusChangeListener, AudioManager.STREAM_MUSIC,
|
||||||
AudioManager.AUDIOFOCUS_GAIN);
|
AudioManager.AUDIOFOCUS_GAIN);
|
||||||
if (focusGained == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
if (focusGained == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
||||||
|
acquireWifiLockIfNecessary();
|
||||||
setSpeed(Float.parseFloat(UserPreferences.getPlaybackSpeed()));
|
setSpeed(Float.parseFloat(UserPreferences.getPlaybackSpeed()));
|
||||||
mediaPlayer.start();
|
mediaPlayer.start();
|
||||||
if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) {
|
if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) {
|
||||||
@ -275,7 +281,7 @@ public class PlaybackServiceMediaPlayer {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
playerLock.lock();
|
playerLock.lock();
|
||||||
|
releaseWifiLockIfNecessary();
|
||||||
if (playerStatus == PlayerStatus.PLAYING) {
|
if (playerStatus == PlayerStatus.PLAYING) {
|
||||||
if (BuildConfig.DEBUG)
|
if (BuildConfig.DEBUG)
|
||||||
Log.d(TAG, "Pausing playback.");
|
Log.d(TAG, "Pausing playback.");
|
||||||
@ -376,7 +382,7 @@ public class PlaybackServiceMediaPlayer {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
playerLock.lock();
|
playerLock.lock();
|
||||||
|
releaseWifiLockIfNecessary();
|
||||||
if (media != null) {
|
if (media != null) {
|
||||||
playMediaObject(media, true, stream, startWhenPrepared.get(), false);
|
playMediaObject(media, true, stream, startWhenPrepared.get(), false);
|
||||||
} else if (mediaPlayer != null) {
|
} else if (mediaPlayer != null) {
|
||||||
@ -593,6 +599,7 @@ public class PlaybackServiceMediaPlayer {
|
|||||||
if (mediaPlayer != null) {
|
if (mediaPlayer != null) {
|
||||||
mediaPlayer.release();
|
mediaPlayer.release();
|
||||||
}
|
}
|
||||||
|
releaseWifiLockIfNecessary();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setVideoSurface(final SurfaceHolder surface) {
|
public void setVideoSurface(final SurfaceHolder surface) {
|
||||||
@ -753,6 +760,7 @@ public class PlaybackServiceMediaPlayer {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
playerLock.lock();
|
playerLock.lock();
|
||||||
|
releaseWifiLockIfNecessary();
|
||||||
|
|
||||||
if (playerStatus != PlayerStatus.INDETERMINATE) {
|
if (playerStatus != PlayerStatus.INDETERMINATE) {
|
||||||
setPlayerStatus(PlayerStatus.INDETERMINATE, media);
|
setPlayerStatus(PlayerStatus.INDETERMINATE, media);
|
||||||
@ -780,6 +788,7 @@ public class PlaybackServiceMediaPlayer {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
playerLock.lock();
|
playerLock.lock();
|
||||||
|
releaseWifiLockIfNecessary();
|
||||||
|
|
||||||
if (playerStatus == PlayerStatus.INDETERMINATE) {
|
if (playerStatus == PlayerStatus.INDETERMINATE) {
|
||||||
setPlayerStatus(PlayerStatus.STOPPED, null);
|
setPlayerStatus(PlayerStatus.STOPPED, null);
|
||||||
@ -793,6 +802,23 @@ public class PlaybackServiceMediaPlayer {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private synchronized void acquireWifiLockIfNecessary() {
|
||||||
|
if (stream) {
|
||||||
|
if (wifiLock == null) {
|
||||||
|
wifiLock = ((WifiManager) context.getSystemService(Context.WIFI_SERVICE))
|
||||||
|
.createWifiLock(WifiManager.WIFI_MODE_FULL, TAG);
|
||||||
|
wifiLock.setReferenceCounted(false);
|
||||||
|
}
|
||||||
|
wifiLock.acquire();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized void releaseWifiLockIfNecessary() {
|
||||||
|
if (wifiLock != null && wifiLock.isHeld()) {
|
||||||
|
wifiLock.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds information about a PSMP object.
|
* Holds information about a PSMP object.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user