将iPhone连接到Android';s Wifi直接软AP
我知道Wifi Direct的工作原理是在其中一台设备中创建一个软AP(软件接入点)。我也知道很多机器人都支持Wifi直连,但iPhone不支持 我的问题是:是否可以创建一个设备到设备的wifi链接,在Android端直接使用wifi,但在iPhone端使用常规wifi?Android的Wifi Direct将呈现一个软AP,iPhone将其视为与普通AP无法区分,并且能够与之关联 想象一下,这是在野外,没有路由器AP可用。此外,两个用户都没有栓系计划将iPhone连接到Android';s Wifi直接软AP,android,iphone,networking,wifi,wifi-direct,Android,Iphone,Networking,Wifi,Wifi Direct,我知道Wifi Direct的工作原理是在其中一台设备中创建一个软AP(软件接入点)。我也知道很多机器人都支持Wifi直连,但iPhone不支持 我的问题是:是否可以创建一个设备到设备的wifi链接,在Android端直接使用wifi,但在iPhone端使用常规wifi?Android的Wifi Direct将呈现一个软AP,iPhone将其视为与普通AP无法区分,并且能够与之关联 想象一下,这是在野外,没有路由器AP可用。此外,两个用户都没有栓系计划 这个链接将被类似凹凸的应用程序用来传输文件
这个链接将被类似凹凸的应用程序用来传输文件。根据您的手机,您可以将Android手机设置为便携式热点,然后通过iPhone连接到该热点。从那里传输数据将是特定于应用程序的 但是,您也可以使用Androids WiFi Direct库。在这种情况下,您可以使用它们来设置Android手机,以创建一个“组所有者”,这与它作为便携式热点基本相同。退房: 我将给你一个代码示例来帮助你入门
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()是感兴趣的代码行,正是这一行将设备实际设置为便携式热点
希望这能澄清问题,我真的不知道你需要多详细的解释。如果有些事情不清楚,请发表评论。greate think…期待答案…我认为这是不可能的,至少在没有设置移动热点的情况下是不可能的。相关问题:嘘,不要告诉苹果;)我将尝试让您的示例代码适用于我连接iPhone的用例。如果我遇到麻烦,我会用问题来评论,当我成功的时候,我会接受你的回答。非常感谢!:)看起来最重要的一行是“manager.createGroup(channel,new ActionListener(){logging code}”。在您的答案中明确强调这一行可能会更好,这样读者就不必费力地通过冗长的样板文件找到关键行。是的,对不起,我想我应该这样做。祝您的项目好运!:)