ここで参照されているように、WifiP2pManager クラスを使用してピアの検出を開始しています。
コードの一部は次のようになります。
//Activity Class
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), null);
//Separate class here
mReceiver = new WiFiDirectBroadcastReceiver(mManager, mChannel, this);
//register the events to filter on to perform the broadcast receiver
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
myTextView.setText("Success discovery");
}
@Override
public void onFailure(int reasonCode) {
myTextView.setText("Discovery errorcode:" + String.valueOf(reasonCode));
}
});
}
onSuccess
私の携帯電話 (JellyBean ベース) で電話を受けることが起こりますが、Android 4.1.2 IceCream サンドイッチの実行をテストするために使用される Lenovo A2107A タブレットonFailure
は、reasonCode が 2 (Busy) に等しい場所を取得します:
http://developer.android.com/reference /android/net/wifi/p2p/WifiP2pManager.ActionListener.html
電話の Wifi 設定に WifiDirect 検出リスト オプションが表示されることに気付きましたが、タブレットにはこれを行うオプションがありません。ただし、OS バージョン 4.x は、少なくともプログラムでサポートしていると思われます (私は ShareIt アプリをテストし、タブレットは WiFi 経由でファイルを転送できます)。
同様の質問がここで行われました: WifiP2pManager を使用すると、常に BUSY になるのはなぜですか? しかし、受け入れられた答えはありません。
タブレットでこの API メソッドを使用しているときに、常にビジー状態になるのを避けるためにできることはありますか? ありがとう!