我正在开发一个需要同时使用wifiLock和wakeLock的应用程序,因此屏幕关闭时的音频流不会受到干扰。 我在Android 2.3和wakeLock上尝试了我的应用程序,看起来像wifiLock正常工作,所以屏幕打开或关闭时没有区别,但屏幕熄灭时Android 4.2(Jelly-bean)上的相同应用程序不是同样工作,音频变得波动,显示wakeLock或wifiLock无法正常工作。这有什么理由吗?
以下是我在主要活动中获取和释放锁的方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "MyWirelessHeadphone");
WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL , "MyWifiLock");
...
}
@Override
protected void onDestroy() {
super.onDestroy();
if (wakeLock.isHeld()==true)
wakeLock.release();
if (wifiLock.isHeld()==true)
wifiLock.release();
}
答案 0 :(得分:3)
我只是偶然发现了这个问题 - 可能对OP来说已经太晚了几年,但为了防止其他人,你可能需要使用WIFI_MODE_FULL_HIGH_PERF
代替WIFI_MODE_FULL
,这会导致流媒体问题:
wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF , "MyWifiLock");
我可能会考虑在Service
而不是Activity
中播放音频,尤其是因为您似乎正在设计它,并且想要在后台运行。
答案 1 :(得分:0)
您正在获取活动中的锁定,当您的活动进入堆栈时,系统可以删除并销毁您的活动,这可能是您的问题的原因。尝试获取服务中的锁定。但PARTIAL锁和WIFI的组合在某些设备上无法正常工作,请看这个问题:Android WifiLock not working?
答案 2 :(得分:0)
发布答案太晚了,但也许对某人有所帮助。当我遇到同样的问题并得到解决方案时:
WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF , "MyWifiLock");
wifiLock.acquire();
PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
wakeLock.acquire();
然后释放destroy方法中的锁:
if (wakeLock != null) {
if (wakeLock.isHeld()) {
wakeLock.release();
}
}
if (wifiLock != null) {
if (wifiLock.isHeld()) {
wifiLock.release();
}
}
我认为在您的情况下所缺少的是您没有获得锁。参见此link。