Wi-Fi Direct を使用して 2 つの Android デバイスを接続しようとしています。
私の HTC-Phone (One SV) では動作しているように見えますが、2 番目のデバイスである LG Optimus 4xhd では動作しません。
onResume() 関数で、次のスレッドを開始します。
new Thread(){
private int count=0;
public void run()
{
mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(tag,"SUCCESS - started discovering peers");
}
@Override
public void onFailure(int reason) {
count++;
String err=new String();
if(reason==WifiP2pManager.BUSY) err="BUSY";
if(reason==WifiP2pManager.ERROR)err="ERROR";
if(reason==WifiP2pManager.P2P_UNSUPPORTED) err="P2P_UNSUPPORTED";
Log.d(tag,"FAIL - couldnt start to discover peers code: "+err+" ("+count+")");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(count>=20)return;
mManager.discoverPeers(mChannel, this);
}
});
}
}.start();
前に言ったように、これは私の HTC で問題なく動作します。しかし、LG では、「FAIL - ピア コードの検出を開始できませんでした: BUSY」(20 回) が表示されます。
同じ結果で WifiP2pManager.createGroup() も試しました。
私が気付いたもう1つのことは、次のフィルターを使用したBroadcastReceiverがLGで何も受信しないことです(HTCはいくつかのブロードキャストを取得します)。フィルター:
filter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
// Indicates a change in the list of available peers.
filter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
// Indicates the state of Wi-Fi P2P connectivity has changed.
filter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
// Indicates this device's details have changed.
filter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
私は派手なことをしようとはしていません。http://developer.android.com/guide/topics/connectivity/wifip2p.htmlの Wi-Fi Direct の Api-Guides に従っているだけです。
何か私にできることはありますか?なぜ LG-Phone がそれほど異なる動作をするのか理解できません。
最後に 1 つだけ確認しておきます: onCreate() では、次のように Manager を取得して初期化します。
mManager = (WifiP2pManager) getSystemService(MainActivity.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), receiver);
そして、両方のデバイスで動作するようです。(チャンネルを取り戻します)