2012-10-02 223 views
13

我知道Wifi Direct通過在其中一個設備中創建軟AP(軟件接入點)來工作。我也知道很多Android都支持WiFi Direct,但iPhone不支持。將iPhone連接到Android的Wifi Direct軟AP

我的問題是:是否有可能創建一個設備到設備的WiFi鏈接是WIFI直接在Android一面,但常規的WiFi在iPhone上的一面呢? Android的Wifi Direct將提供一個軟AP,iPhone將看到與常規AP無法區分並可以關聯的軟AP。

想象一下,這是在沒有路由器AP可用的荒野中。另外,兩個用戶都沒有共享計劃。

此鏈接將被類似Bump的應用程序用於傳輸文件。

+0

馬麗娟思想....期待着答案...... –

+0

我不認爲這是可能的,至少在沒有建立移動熱點 –

+0

相關問題:http://stackoverflow.com/questions/9799804/is-wi-fi-direct-connection-possible-within-ios-devices-and-among-wifi-direct-ena – AlcubierreDrive

回答

7

根據您的手機,您可以將您的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演示,它應該很清楚。

注意,線manager.createGroup(信道,新的ActionListener()是感興趣的代碼行,在這條線實際上設置該設備作爲一個便攜式熱點。

希望這澄清的事情,我不噸真的知道你需要解釋如何詳細。評論,如果有些事情是不明確的。

+0

我會嘗試讓您的示例代碼爲我的連接iPhone的用例工作。如果我遇到麻煩,我會回答問題,當我成功時,我會接受你的回答。萬分感謝! :) – AlcubierreDrive

+0

它看起來像是重要的一行是「manager.createGroup(channel,new ActionListener(){logging code}」。在你的答案中明確地突出顯示該行可能會很好,這樣讀者就不必趟通過很長的樣板找到關鍵線 – AlcubierreDrive

+0

是的,對不起,我想我應該做到這一點,祝你的項目順利! –

相關問題