我正在使用WiFi-Direct在Android上尝试P2P通信。我有一项搜索其他手机的服务,如果之前已配对,则会自动连接到这些手机。无论屏幕是打开还是关闭,我都希望能够正常工作。
Android提供了一个选项,可在设备屏幕关闭时保持WiFi处于活动状态。但看起来它不会影响WiFi-Direct。关闭设备屏幕并等待一分钟后,WifiP2pManager
似乎停止发现新同行。
有人知道如何解决此问题吗?
答案 0 :(得分:0)
所以这里发生的事情是你在屏幕关闭50秒后调用startDiscoveryProcess()
并且startDiscoveryProcess()
每隔50秒调用一次。如何阻止这个过程?您正在侦听Intent.ACTION_SCREEN_ON
,如果屏幕已开启,我们不会发送广播以重新开始发现。
boolean screenOn = true;
BroadcastReceiver screenReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF) || intent.getAction().equals("MY_ACTION_WHEN_SCREEN_IS_OFF")) {
screenOn = false;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// start discovery process again
startDiscoveryProcess();
}
}, 50000);
} else if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOn = true;
}
}
};
在您的onCreate()
服务中,注册接收方:
IntentFilter filters = new IntentFilter();
filters.addAction(Intent.ACTION_SCREEN_OFF);
filters.addAction(Intent.ACTION_SCREEN_ON);
filters.addAction("MY_ACTION_WHEN_SCREEN_IS_OFF");
registerReceiver(screenReceiver, filters);
然后确保使用我们上面调用的方法:
void startDiscoveryProcess() {
//start discovery process
// do something...
// then send the broadcast yourself to do this every 50 seconds because discovery stops at 60 seconds
if(!screenOn) {
Intent intent = new Intent("MY_ACTION_WHEN_SCREEN_IS_OFF");
sendBroadcast(intent);
}
}