android - 将 iPhone 连接到 Android 的 Wifi Direct 软 AP

标签 android iphone networking wifi wifi-direct

我知道 Wifi Direct 的工作原理是在其中一台设备中创建软 AP(软件接入点)。我也知道很多 Android 支持 Wifi Direct,但 iPhone 不支持。

我的问题是:是否可以创建一个设备到设备的 wifi 链接,在 Android 端是 Wifi Direct,但在 iPhone 端是常规 wifi? Android 的 Wifi Direct 会呈现一个软 AP,iPhone 会认为它与普通 AP 没有区别,并且能够与之关联。

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

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

最佳答案

根据您的手机,您可以将您的 Android 手机设置为可移植热点并与 iPhone 连接。从那里获取数据传输将是特定于应用程序的。

不过,您也可以使用 Android 的 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 演示,您应该清楚了。

请注意,manager.createGroup(channel, new ActionListener() 行是感兴趣的代码行,正是这一行实际将设备设置为可移植热点。

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

关于android - 将 iPhone 连接到 Android 的 Wifi Direct 软 AP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12684709/

相关文章:

android - 隐藏按钮后如何用ListView填充空白区域

android - zxing onActivityResult 不在 Fragment 中调用,仅在 Activity 中

iphone - Mapkit 绘制一个圆

python - Windows 的 Wi-Fi 接口(interface)

c - 无法使用 ioctl SIOCSIFADDR 更改 IP 地址

C++ 网络,recv() 无缘无故失败(?)

Android Listview 从 url 加载 imageview

android - 使用导航组件保存 RecyclerView 的滚动

iPhone 5 屏幕截图未显示在 iPhone 5 App Store 上

iphone - UIView viewWithTag 0问题