将iPhone连接到Android的Wifi Direct软AP

我知道Wifi Direct可以通过在其中一个设备中创建一个Soft AP(软件访问点)来工作。 我也知道很多Androids都支持Wifi Direct,但iPhone却没有。

我的问题是:是否有可能创建一个设备到设备的WiFi链接,在Android端是Wifi Direct,但iPhone端的常规wifi? Android的Wifi Direct会呈现一个软AP,iPhone看起来与常规AP无法区分,并能够与之关联。

想象一下,这是在没有路由器AP可用的荒野中。 此外,两个用户都没有绑定计划。

此类链接将由类似Bump的应用程序用于传输文件。

根据您的手机,您只需将Android手机设置为便携式热点,然后通过iPhone连接即可。 从那里,它将是特定于应用程序以获取数据传输。

但是,您也可以使用Androids WiFi-Direct库。 在这种情况下,您将使用它们来设置Android手机以创建“群组所有者”,这基本上与它是便携式热点相同。 查看:

http://developer.android.com/guide/topics/connectivity/wifip2p.html

我将为您提供一个代码示例来帮助您入门。

public class WifiDirectAPtestActivity extends Activity { private WifiP2pManager manager; private boolean isWifiP2pEnabled = false; private boolean retryChannel = false; private final IntentFilter intentFilter = new IntentFilter(); private Channel channel; private BroadcastReceiver receiver = null; public void setIsWifiP2pEnabled(boolean isWifiP2pEnabled) { this.isWifiP2pEnabled = isWifiP2pEnabled; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // add necessary intent values to be matched. 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); manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); channel = manager.initialize(this, getMainLooper(), null); } /** register the BroadcastReceiver with the intent values to be matched */ @Override public void onResume() { super.onResume(); receiver = new WiFiDirectBroadcastReceiver(manager, channel, this); registerReceiver(receiver, intentFilter); createGroup(); } @Override public void onPause() { super.onPause(); unregisterReceiver(receiver); manager.removeGroup(channel, new ActionListener() { @Override public void onFailure(int reasonCode) { Log.d("WifiDirectAptestActivity", "Disconnect failed. Reason :" + reasonCode); } @Override public void onSuccess() { Log.d("WifiDirectAptestActivity", "Should have been sucessfully removed"); } }); } public void createGroup() { manager.createGroup(channel, new ActionListener() { @Override public void onSuccess() { // WiFiDirectBroadcastReceiver will notify us. Ignore for now. Log.d("WifiDirectAPtestActivity", "Group creating request successfully send"); } @Override public void onFailure(int reason) { Toast.makeText(WifiDirectAPtestActivity.this, "Connect failed. Retry.", Toast.LENGTH_SHORT).show(); } }); } 

此外,你需要广播接收器,看看WiFi-Direct演示,你应该清楚。

请注意,line manager.createGroup(channel,new ActionListener()是感兴趣的代码行,正是这条线实际上将设备设置为便携式热点。

希望这能澄清事情,我真的不知道你需要多详细的解释。 评论是否有些事情不清楚。