2016-10-04 3 views
0

私はWiFi-Directを使用してAndroidでP2P通信を試しています。私は他の電話を探して、以前にペア設定されていれば自動的に接続するサービスを持っています。私は画面がオンであるかオフであるかに関わらず、これを動作させるのが好きです。Android:WiFi - 画面がオフのときの直接通信

Androidには、端末の画面がオフのときにWiFiを有効にするオプションがあります。しかし、WiFi Directには影響しないようです。デバイスの画面をオフにして1分待つと、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); 
    } 
} 
関連する問題