2017-07-21 21 views
0

NFCでピアリングされた別のデバイスとWiFiダイレクト接続を確立したいとします。私の手順は次のとおりです。android - ピアを検出しないでWiFi P2Pデバイスに接続する

まず、デバイスAは独自のWiFiP2Pアドレスを取得し、NFC経由でデバイスBに送信します。

次に、デバイスBは、指定されたアドレスを使用してデバイスAとの接続を確立しようとします。

私が見たように、私はプロセスでピアを発見することに関与しませんでした。しかし、デバイスBが接続しようとすると、結果は常に失敗します(理由0、これはERRORです)。

これはデバイスの可視性に関連している可能性がありますが、わかりませんし、デバイスを表示させるコードを見つけることができません。ここで

は私のコードです:OnCreateイベントで

//NOTE: These code should be executed on Device B 
//Starting WiFi Direct Transmission 
//First we should establish a connection 
WifiP2pConfig config = new WifiP2pConfig(); 
config.deviceAddress = remoteWifiP2pDevice; 
//remoteWifiP2pDevice is the address of device A obtained from NFC 
config.wps.setup = WpsInfo.PBC; 
mManager.connect(mChannel, config, new WifiP2pManager.ActionListener() { 
     @Override 
     public void onSuccess() { 
      //success logic 
      Toast.makeText(MainActivity.this, "success", Toast.LENGTH_SHORT).show(); 
      if (!FILE_RECV) 
      { 
       new SendFilesTask().execute(""); 
      } 
     } 
     @Override 
     public void onFailure(int reason) { 
      //failure logic 
      Toast.makeText(MainActivity.this, "failed" + reason, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

()私は

intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION); 
intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION); 
intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION); 
intentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);   
mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); 
mChannel = mManager.initialize(this, getMainLooper(), null); 
mReceiver = new WiFiDirectBroadcastReceiver(mManager, mChannel, this); 

を持ってWifiDirectBroadcastReceiverは、デバイスAのアドレスを取得するだけで、関連するコードがあり、空とみなすことができます。

これらの問題は何ですか?どうすれば修正できますか? ありがとうございます。

P.S.デバイスAとデバイスBを手動で接続して、コードをもう一度実行すると、成功します。

答えて

0

私は、数秒の遅延が接続を成功させることを発見しました。理由はわかりませんが、これを回避策として使用できます。

だからこそ、これにはより良い解決策がありますか?なぜ遅延が働くのですか?

0
  • WiFiの直接の前提条件:

すべてのデバイスを同時に検出可能(スキャンモード) にする必要があります。

デバイスが30秒間スキャンしたあと、 がデフォルトで停止します。したがって、プログラムを使用してスキャンを開始する必要があります。 discoverpeersメソッドを使用します。

近くのデバイスが表示されている最も重要なのは、彼らが無線LAN直接 が信頼できない理由available.Thatsがあり、なぜならこれらの、中くらいの無線LAN 直接アプリケーションがある文句を言わない本家機器specific.ieは時々デバイスが文句を言わない 近くのものを示していますプレイストア。

関連する問題