我目前正在编写一个Android应用程序,它使用webview和webrtc来传输音频流。问题是,至少在我的手机上,屏幕关闭几分钟后连接就会被切断。
我已经获得了一个CPU锁和一个wifi锁(用isHeld验证),但它没有任何区别。
该应用程序也可以作为web application使用:这里似乎按预期工作,连接保持活跃。
我已经检查了wifi设置:它设置为始终开启。
任何指针/想法都非常感谢。该应用程序是开源的,所以我很乐意分享任何代码,如果这有任何帮助。锁定抓取完成:
private void grabWakeLock() {
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakelockTag");
wakeLock.acquire();
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "gonimo-wifi-lock");
wifiLock.acquire();
}
我的Manifest中有以下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera" />
非常感谢提前!
Android Doze似乎就是这种行为的原因。手动触发Doze会导致相同的行为。还
return pm.isIgnoringBatteryOptimizations(packageName);
返回false,因此应用程序的网络将关闭!问题:article中描述的白名单似乎不存在于我的手机上。我无法在设置和操作中找到它:
Intent intentBattery = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intentBattery.setData(Uri.parse("package:" + "org.gonimo.gonimo"));
startActivity(intentBattery);
导致无法找到活动的异常。
答案 0 :(得分:7)
这是“Android,请不要杀死我长时间运行的后台操作”食谱
检查:
PowerManager powerManager =
(PowerManager)getActivity().getSystemService(Activity.POWER_SERVICE);
powerManager.isIgnoringBatteryOptimizations(getActivity().getPackageName());
要求白名单:
Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
startActivity(intent);
不要认为这是鼓励使用它作为一般方法,只有少数用例使这个程序合法化。