gpt4 book ai didi

android - android中的ServerSocket在 sleep 模式下不接受[屏幕关闭]

转载 作者:行者123 更新时间:2023-12-05 00:07:30 25 4
gpt4 key购买 nike

我需要使用后台服务中的线程中的 ServerSocket 接受数据当设备 [Galaxy s3 19300,Android 4.1.2] 处于唤醒状态时,ServerSocket 可以正常接收数据。但是当设备处于 sleep 模式时,即当屏幕关闭时,ServerSocket 似乎不接受。

我尝试使用 WIFI 锁,完全锁和部分锁以及电源锁,但是这两个选项都无法让 ServerSocket 监听。

有解决这个问题的线索吗?

代码

// -------------------------------------------------------------------------
private void CallSock() {
Log.i("$$$$$",
"Before WiFI State is " + Integer.toString(wm.getWifiState()));
wm = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL, "MyWifiLock");
PowerManager mgr = (PowerManager) mContext
.getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakeLock");
wakeLock.acquire();
if (!wifiLock.isHeld()) {
wifiLock.acquire();
Log.i("$$$$$", "Wifi lock acquired");
}
Looper.prepare();
sSocket = new ServerSocket(serverPort);
while (true) {
Log.i("$$$$$", "In the While loop WiFI State is "
+ Integer.toString(wm.getWifiState()));
Rulecontent.writeLogInfo("Waiting to recieve file");
String fileName = readFile();
}
}

// -------------------------------------------------------------
public String readFile() {
StringBuilder x = null;
try {
InputStream in = null;
Socket recvClientSocket = sSocket.accept();
in = recvClientSocket.getInputStream();
byte[] bytes = new byte[1024];
x = new StringBuilder();
int numRead = 0;
while ((numRead = in.read(bytes)) >= 0) {
x.append(new String(bytes, 0, numRead));
}
} catch (IOException e) {
e.printStackTrace();
}
return x.toString();
}
// -------------------------------------------------------------------------

最佳答案

确保您拥有 android.permission.WAKE_LOCK 权限,并且用户已在 Android Wifi 管理器中将他们的 Wifi 设置设置为“永不休眠”。

我已经验证 ServerSocket 在标准 Thread(由 Activity 启动)中与 Android 4.0 中的screen off 一起工作 -- 我还没有尝试将其作为后台服务。我可以每 10 分钟从外部服务器向我的手机发送命令。

用于获取Wifi 和电源 锁的代码 fragment ,两者都是必需的:

https://stackoverflow.com/a/18916511/830775

关于android - android中的ServerSocket在 sleep 模式下不接受[屏幕关闭],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17940982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com