に接続した後、私は私は、彼らが彼を見つけたら、ピアが手動でグループの所有者に接続したい手動アンドロイドWifip2p:なぜグループの情報がnullであるグループの所有者
を選択し、グループの所有者に複数のデバイスを接続しようとしています
私は3台の携帯電話(無エミュレータ)を持っているが、それぞれにあなたは私がrequestGroupInfo
を行う参照し、それを印刷しているリスナーを渡すことができるように、このクリックハンドラー
public void createWifiGroup(View view) {
mManager.createGroup(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
mManager.requestGroupInfo(mChannel,new MyGroupInfoListener(MainActivity.this));
}
@Override
public void onFailure(int reason) {
}
});
}
でボタン「グループを作成」がありますログ内の次の行:
groupFormed: true isGroupOwner: true groupOwnerAddress: /192.168.49.1
だから私はそれは私も
BroadCastReceiver
呼び出しが
WIFI_P2P_PEERS_CHANGED_ACTION
行動の意図を受信する
MyPeerListener
クラスを持っている
に成功したと仮定します。
MyPeerListener
は仲間を反復処理し、それがグループの所有者
@Override
public void onPeersAvailable(WifiP2pDeviceList wifiP2pDeviceList) {
this.wifiP2pDeviceList = wifiP2pDeviceList;
//Toast toast = Toast.makeText(receiver.mActivity, "I found some peers", Toast.LENGTH_LONG);
// toast.show();
Iterator<WifiP2pDevice> deviceListIterator = wifiP2pDeviceList.getDeviceList().iterator();
boolean foundGroup = false;
while (deviceListIterator.hasNext()) {
final WifiP2pDevice device = deviceListIterator.next();
if (!foundGroup && device.isGroupOwner() && !MainActivity.connected) {
//MainActivity.mManager.removeGroup(MainActivity.mChannel, null);
foundGroup = true;
final WifiP2pConfig config = new WifiP2pConfig();
//config.wps.setup = WpsInfo.PBC;
config.groupOwnerIntent = 0;
config.deviceAddress = device.deviceAddress;
MainActivity.mManager.connect(MainActivity.mChannel, config, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
//success logic
Toast toast = Toast.makeText(receiver.mActivity, "connect success", Toast.LENGTH_SHORT);
toast.show();
MainActivity.connected = true;
MainActivity.mManager.requestGroupInfo(MainActivity.mChannel, new MyGroupInfoListener(receiver.mActivity));
MainActivity.mManager.requestConnectionInfo(MainActivity.mChannel, new MyConnectionInfoListener(receiver));
}
@Override
public void onFailure(int reason) {
//failure logic
//MainActivity.connected = false;
Toast toast = Toast.makeText(receiver.mActivity, "connect fail, reason: " + reason, Toast.LENGTH_LONG);
toast.show();
}
});
}
ListView list = (ListView) receiver.mActivity.findViewById(R.id.device_list_view);
list.setAdapter(new DeviceListViewAdapter(this, receiver.mActivity));
}
}
}
を(私は静的変数と全体的な悪いデザインの使用を認識していますが、これは学ぶための高速プロトタイプです)発見した場合に接続します
は今、私はconnect success
Toast
が、接続が私にこのラインを示した直後にrequestConnectionInfo
取得
groupFormed: false isGroupOwner: false groupOwnerAddress: null
requestGroupInfoへの呼び出しも示しています
group is null
は、これは非常に多くの場合、時間の約80%を発生します。場合によってはデフォルトグループIP 192.168.49.1
が表示されます。しかし、両方の "スレーブ"の電話機が正しいグループ情報を持っている場合、私は運が良いでしょう。
グループ情報がnullのときに所有者にソケットを接続しようとすると、destination host unreachable
で失敗します。しかし、グループ情報が正しい場合は、データを正しく接続して送信することができます。
なぜこのようなことが起こっていますか?接続が成功する可能性はありますが、グループはnullですか?
Wi-Fi Directには奇妙な問題がたくさんあります。私はしばらくそれを使って、役立つリソースや問題のリストを作成しました:https://groups.google.com/forum/#!フォーラム/ wi-fi-direct – Brendan
実際に@Brendan、それはかなり矛盾しているようです。 – vlatkozelka
私はそれが類似のデバイスを接続し、近くにほとんどネットワーク活動がないときに最もうまくいくことを発見しました。このWi-Fi Directハンドラライブラリは、学習しているときに役立ちます:https://github.com/Crash-Test-Buddies/WiFi-Buddyこれは、多くの情報を記録します。グループ接続の管理方法を参照してください – Brendan