web-dev-qa-db-fra.com

Connectez deux téléphones Android avec une connexion Wi-Fi (sans ordinateur portable ni point d'accès) et envoyez un fichier

Est-il possible de connecter deux téléphones Android par wi-fi, sans utiliser de bluetooth/GSM/CDMA/IR? En outre, il n'y a pas de points d'accès pour ordinateur portable ou wi-fi ni de routeurs wi-fi.

Je pense qu’il est possible de créer un SSID sur les deux téléphones, effectuez une configuration statique des adresses IP. Est-ce qu'Android va se connecter à une autre connexion wi-fi?

S'ils seront connectés, comment puis-je envoyer un fichier d'un téléphone à l'autre? Existe-t-il un client et un serveur ftp? ou puis-je ssh à un autre téléphone? Ou telnel/netcat? Peut-être http?

23
osgx

Ceci s'appelle réseau ad hoc et a déjà été demandé: 

Est-ce qu'Android peut faire du réseautage ad-hoc entre homologues?

Connexion Wifi directe directe ad-hoc Android Wifi

Fonctionnalités de connexion ad hoc/points d'accès Android

Mettre à jour:

Réponse courte: ad hoc n'est pas encore pris en charge sur Android, donc cela ne fonctionnerait pas. 

Vous pouvez utiliser Bluetooth pour connecter deux téléphones Android en mode P2P. 

Mise à jour 2:

La connexion directe de périphérique à périphérique via Wifi est prise en charge sous API 14 dans Android 4.0 ICS dans le package Android.net.wifi.p2p . Vous pouvez tester les capacités des appareils via FEATURE_WIFI_DIRECT .

19
Peter Knego

C'est effectivement possible avec SDK V 14 . En tant que les documents indiquer:

  1. Créer un récepteur de diffusion pour les intentions Wi-Fi Direct
  2. Configurer les autorisations
  3. Configurez le récepteur dans onCreate ()
  4. Configurer un filtre d'intention
  5. Enregistrez le récepteur dans onResume ()

J'ai inclus certaines des constructions de code clé ci-dessous pour y arriver. Mais lisez la documentation pour plus d'informations.

Voici un exemple de récepteur de diffusion

public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {

    private WifiP2pManager manager;
    private Channel channel;
    private MyWiFiActivity activity;

    public WiFiDirectBroadcastReceiver(WifiP2pManager manager, Channel channel,
            MyWifiActivity activity) {
        super();
        this.manager = manager;
        this.channel = channel;
        this.activity = activity;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
            int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
            if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
                // Wifi Direct is enabled
            } else {
                // Wi-Fi Direct is not enabled
            }
        } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
            // Call WifiP2pManager.requestPeers() to get a list of current peers
        } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
            // Respond to new connection or disconnections
        } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
            // Respond to this device's wifi state changing
        }
    }
}

Permissions:

<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
<uses-permission Android:name="Android.permission.CHANGE_WIFI_STATE" />
<uses-permission Android:name="Android.permission.CHANGE_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
3
PearsonArtPhoto

Si vous voulez juste utiliser cette fonctionnalité et ne pas l'implémenter dans votre propre application, consultez des applications telles que Superbeam , Envoyer! ou Fast File Transfer, qui utilise principalement le WiFi directement.

Voici quelques liens. 

1
Andy

Essayez de vous connecter avec FTPDroid et Turbo Client via wifi. Soit cela, soit configurer un VPN et connecter tous vos appareils à distance via SSH, FTP et/ou SFTP.

0
jmarcosSF