将 iPhone 连接到 Android 的 Wifi Direct 软 AP
Posted
技术标签:
【中文标题】将 iPhone 连接到 Android 的 Wifi Direct 软 AP【英文标题】:connect iPhone to Android's Wifi Direct soft AP 【发布时间】:2012-09-22 23:27:04 【问题描述】:我知道 Wifi Direct 的工作原理是在其中一个设备中创建一个软 AP(软件接入点)。我也知道很多 android 设备支持 Wifi Direct,但 iPhone 不支持。
我的问题是:是否可以创建一个设备到设备的 wifi 链接,在 Android 端是 Wifi Direct,但在 iPhone 端是常规 wifi? Android 的 Wifi Direct 将呈现一个软 AP,iPhone 会认为它与普通 AP 没有区别,并且能够与之关联。
想象一下,这是在没有路由器 AP 可用的荒野中。此外,两个用户都没有网络共享计划。
此链接将被类似 Bump 的应用用于传输文件。
【问题讨论】:
好主意....期待答案... 我认为这是不可能的,至少在没有设置移动热点的情况下是不可能的 相关问题:***.com/questions/9799804/… 嘘,别告诉苹果 ;) 【参考方案1】:根据您的手机,您可以将 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() 是感兴趣的代码行,正是这一行将设备实际设置为便携式热点。
希望这可以澄清事情,我真的不知道您需要多详细的解释。如果有些事情不清楚,请发表评论。
【讨论】:
我将尝试让您的示例代码适用于我连接 iPhone 的用例。如果我遇到麻烦,我会用问题发表评论,当我成功时,我会接受你的回答。万分感谢! :) 看起来重要的一行是“manager.createGroup(channel, new ActionListener() logging code”。在答案中明确突出显示该行可能会很好,以便读者不要不必费力通过冗长的样板来找到关键线。 是的,对不起,我想我应该这样做。祝你的项目好运! :)以上是关于将 iPhone 连接到 Android 的 Wifi Direct 软 AP的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式连接到 Android 中的特定 Wi-Fi 网络?
Xamarin.Forms 可以通过 Wi-FI 在 iPhone(真实设备)上工作,而无需连接到来自 VS 2019 CE Windows 10 的真实 Mac Os?
在连接到 IPv6 网络的 Wi-Fi 上运行 iOS 10.0