web-dev-qa-db-fra.com

connectez l'iPhone au point d'accès logiciel Wifi Direct d'Android

Je sais que Wifi Direct fonctionne en créant un Soft AP (point d'accès logiciel) dans l'un des appareils. Je sais également que de nombreux androïdes prennent en charge Wifi Direct, mais pas les iPhones.

Ma question est: est-il possible de créer un lien wifi appareil à appareil qui est Wifi Direct du côté Android, mais du wifi normal du côté iPhone? Où serait le Wifi Direct d'Android? présentant un AP souple, que l'iPhone verrait comme indiscernable d'un AP ordinaire et pourrait être associé à.

Imaginez que c'est dans le désert où aucun routeur AP n'est disponible. De plus, aucun des utilisateurs n'a de plan de connexion.

Ce lien serait utilisé par une application de type Bump pour transférer des fichiers.

16
AlcubierreDrive

Selon votre téléphone, vous pouvez simplement configurer votre Android comme point d'accès portable et vous y connecter avec l'iPhone. À partir de là, il serait spécifique à l'application de transférer les données.

Cependant, vous pouvez également utiliser les bibliothèques Androids WiFi-Direct. Dans ce cas, vous les utiliseriez pour configurer le Android pour créer un "propriétaire de groupe", qui est fondamentalement le même que s'il s'agissait d'un point d'accès portable. Vérifiez:

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

Je vais vous donner un exemple de code pour vous aider à démarrer.

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

De plus, vous aurez besoin du récepteur de diffusion, regardez la démo WiFi-Direct et cela devrait être clair pour vous.

Notez que line manager.createGroup (channel, new ActionListener () est la ligne de code qui vous intéresse, c'est cette ligne qui configure réellement l'appareil comme un hotspot portable.

J'espère que cela clarifie les choses, je ne sais pas vraiment à quel point vous avez besoin d'explications détaillées. Commentez si certaines choses ne sont pas claires.

10
Nils Erik