2012-10-02 32 views
13

Sé que Wifi Direct funciona al crear un AP Suave (punto de acceso de software) en uno de los dispositivos. También sé que muchos Androids son compatibles con Wifi Direct, pero los iPhones no.conecta iPhone a Android Wifi Direct AP suave

Mi pregunta es: ¿es posible crear un enlace wifi de dispositivo a dispositivo que sea Wifi Direct en el lado de Android, pero wifi regular en el lado de iPhone? Donde Wifi Direct de Android estaría presentando un AP suave, que el iPhone vería como indistinguible de un AP regular y podría asociarse.

Imagine que esto está en el desierto donde no hay ningún enrutador AP disponible. Además, ninguno de los usuarios tiene un plan de anclaje.

Este enlace sería utilizado por una aplicación tipo Bump para transferir archivos.

+0

greate thought .... esperando respuestas ... –

+0

No creo que esto sea posible, al menos no sin configurar un punto de acceso móvil –

+0

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

Respuesta

7

Dependiendo de su teléfono, puede simplemente configurar su teléfono Android como un punto de acceso portátil y conectarse a eso con el iPhone. A partir de ahí, sería una aplicación específica para transferir los datos.

Sin embargo, también puede utilizar las bibliotecas de Androids WiFi-Direct. En ese caso, los usaría para configurar el teléfono Android para crear un "propietario del grupo", que básicamente es lo mismo que un punto de acceso portátil. Salida:

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

Te daré un ejemplo de código para ayudarle a empezar.

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(); 
     } 
    }); 
} 

Además usted necesitará el receptor de radiodifusión, mirar a la demo-Wi-Fi Direct y debe ser claro para usted.

Tenga en cuenta que la línea manager.createGroup (canal, new ActionListener() es la línea de código de interés, es esta línea que realmente pone en marcha el dispositivo como una zona Wi-Fi.

la esperanza que esto aclare las cosas, no me' Realmente sé cómo la explicación detallada que necesita. Comente si algunas cosas no están claras.

+0

Voy a intentar que tu código de ejemplo funcione para mi caso de uso de la conexión de un iPhone. Si encuentro problemas, los comentaré con preguntas y cuando tenga éxito, aceptaré su respuesta. ¡Gracias una tonelada! :) – AlcubierreDrive

+0

Parece que la única línea que es importante es "manager.createGroup (channel, new ActionListener() {logging code}". Podría ser útil resaltar explícitamente esa línea en su respuesta para que los lectores no tengan que vadear a través de un largo parábola para encontrar la línea clave. – AlcubierreDrive

+0

Sí, lo siento, creo que debería haber hecho eso. ¡Buena suerte con su proyecto! :) –