2012-10-02 10 views
13

So che Wifi Direct funziona creando un Soft AP (punto di accesso software) in uno dei dispositivi. So anche che molti Androidi supportano Wifi Direct, ma gli iPhone no.collega l'iPhone all'AP morbido Android Wifi Direct

La mia domanda è: è possibile creare un collegamento wifi dispositivo-to-device che sia Wifi Direct sul lato Android, ma regolare wifi sul lato iPhone? Dove il Wifi Direct di Android presenterebbe un AP morbido, che l'iPhone vedrebbe come indistinguibile da un normale AP e in grado di associarsi.

Immaginate che questo sia fuori nella natura dove non è disponibile un router AP. Inoltre, nessun utente ha un piano di tethering.

Questo collegamento verrebbe utilizzato da un'app di tipo Bump per trasferire i file.

+0

greate pensato .... in attesa di risposte ... –

+0

Non penso che sia possibile, almeno non senza creare un hotspot mobile –

+0

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

risposta

7

A seconda del telefono, puoi configurare il tuo telefono Android come un hotspot portatile e collegarlo a quello con l'iPhone. Da lì sarebbe specifico dell'applicazione per ottenere i dati trasferiti.

Tuttavia è possibile utilizzare anche le librerie WiFi-Direct di Androids. In tal caso, li useresti per configurare il telefono Android per creare un "proprietario del gruppo", che fondamentalmente è lo stesso di un hotspot portatile. Check out:

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

Vi darò un esempio di codice per aiutarti a iniziare.

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

Inoltre è necessario il ricevitore di broadcast, guarda la demo WiFi-diretto e dovrebbe essere chiaro a voi.

Si noti che la linea manager.createGroup (canale, nuova ActionListener() è la codeline di interesse, è questa linea che in realtà configura il dispositivo come un hotspot portatile.

Spero che questo chiarisce le cose, I don' so davvero quanto sia dettagliata la spiegazione di cui hai bisogno.Fai un commento se alcune cose non sono chiare

+0

Proverò a far funzionare il tuo codice di esempio per il mio caso di utilizzo di un iPhone. Se dovessi avere problemi, commenterò con domande e quando avrò successo accetterò la tua risposta. Grazie mille! :) – AlcubierreDrive

+0

Sembra che una riga importante sia "manager.createGroup (canale, nuovo ActionListener() {codice di registrazione}". Potrebbe essere utile evidenziare in modo esplicito quella riga nella risposta in modo che i lettori non debbano guadare attraverso un lungo boilerplate per trovare la linea chiave – AlcubierreDrive

+0

Sì, mi dispiace, credo che avrei dovuto farlo ... Buona fortuna con il tuo progetto! :) –