2016-10-04 3 views
0

WiFi-Direct를 사용하여 Android에서 P2P 통신을 실험하고 있습니다. 다른 휴대 전화를 검색하고 이전에 페어링 된 경우 자동으로 연결하는 서비스가 있습니다. 나는 화면이 켜져 있는지 꺼져 있는지에 관계없이이 기능을 갖고 싶어한다.Android : WiFi- 화면이 꺼져있을 때 직접 통신

Android는 기기 화면이 꺼져있을 때 WiFi를 유지할 수있는 옵션을 제공합니다. 하지만 WiFi Direct에는 영향을 미치지 않는 것 같습니다. 기기의 화면을 끄고 잠시 기다리면 WifiP2pManager은 새로운 피어 검색을 중지 한 것 같습니다.

누구나이 문제를 해결하는 방법에 대해 알고 있습니까?

답변

0

그래서 화면이 꺼지고 50 초 후에 startDiscoveryProcess()을 호출하고 startDiscoveryProcess()이 50 초마다 호출하는 중입니다. 그 과정을 멈추는 방법? Intent.ACTION_SCREEN_ON을 수신하고 화면이 켜져있는 경우 브로드 캐스트를 보내 검색을 다시 시작하지 않습니다.

서비스의 onCreate()에서
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; 
     } 
    } 
}; 

, 수신기를 등록 :

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); 
    } 
} 
관련 문제