Android:屏幕关闭时的WiFi-Direct通信

时间:2016-10-04 15:27:17

标签: android wifi android-wifi wifi-direct wifip2p

我正在使用WiFi-Direct在Android上尝试P2P通信。我有一项搜索其他手机的服务,如果之前已配对,则会自动连接到这些手机。无论屏幕是打开还是关闭,我都希望能够正常工作。

Android提供了一个选项,可在设备屏幕关闭时保持WiFi处于活动状态。但看起来它不会影响WiFi-Direct。关闭设备屏幕并等待一分钟后,WifiP2pManager似乎停止发现新同行。

有人知道如何解决此问题吗?

1 个答案:

答案 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);
    }
}