0

当我尝试在后台流式传输音乐时,我的应用程序出现问题,并且仅在某些设备上出现。

当应用程序在前台播放任何音乐时,它可以正常工作,但在某些设备中,当我按下电源按钮时,流会立即失去其质量(看起来就像我处于低速互联网连接时一样)。当我打开屏幕时,流再次变得更好。

我已经尝试过了WakeLocks,但是没有用。


编辑 1:这就是我使用唤醒锁的方式:

OnCreate我的活动:

//Setting the wakelock
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");

而不是我在音乐开始时这样做:

wl.acquire();

当流停止时:

if(wl.isHeld()){
    wl.release();
}

编辑2:

也试过这个:

mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);

编辑3:

也尝试过使用 WiFi 锁:

//Setting the proper lockMode depending on the android version:
int wifiLockMode = WifiManager.WIFI_MODE_FULL;

int sdkVersion = Build.VERSION.SDK_INT;

//WIFI_MODE_FULL_HIGH_PERF was added on Android 3.1 so 
//I need to implement this to make sure the wifi will execute on its full power(even if it consumes more battery)
if (sdkVersion >= Build.VERSION_CODES.HONEYCOMB_MR1) {
wifiLockMode = WifiManager.WIFI_MODE_FULL_HIGH_PERF;
}

//Setting the WifiLock
WiFiManager wm = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 
WifiLock mWiFiLock = wm.createWifiLock(wifiLockMode, "MyFlag");
mWiFiLock.acquire();

//Releasing the WifiLock
if(mWiFiLock.isHeld()){
    mWiFiLock.release();
}

使用 WifiLock 似乎会好一些(或者我已经习惯了中断的声音)

有任何想法吗?

4

2 回答 2

0

我认为您不能真正做某事,因为我认为每个 OEM 都会重写它的“电池优化”规则,这些规则将在屏幕关闭时尝试保存电池。

最好的办法是遵循有关MediaPlayer 的唤醒锁系统的 Android 标准,然后用手指交叉 :)

于 2013-09-14T08:19:11.383 回答
0

我在使用 android 4.3 的 Nexus 4 上遇到了同样的质量问题,发现如果我关闭“wifi 优化”,问题就解决了:Wi-Fi-> 高级 -> Wi-Fi 优化。

似乎与其他线程一致:

https://code.google.com/p/android/issues/detail?id=42272#c319 http://forum.xda-developers.com/showthread.php?t=2072930&page=55

如果这是真的,wifi 锁定不会阻止 wifi 优化。我还测试了唤醒锁不需要在屏幕关闭的情况下播放高质量的音乐,至少在 Nexus 4 上是这样。

于 2013-09-14T08:03:51.967 回答