2011-10-28 17 views
6

Me sorprende que no pueda encontrar ninguna información en Internet sobre esta situación común: ¿Cómo puedo iniciar una conexión a Internet? Miré ConnectivityManager pero parece que solo sirve para monitorear la conectividad de la red.Android: Establezca la conexión a Internet

PD: El teléfono se enrutará, por lo que no es un problema.

+1

"? ¿Cómo puedo iniciar una connetion Internet", significa lo que quiere hacer? – user370305

+0

Digamos que quiero abrir una conexión wifi en una red privada programáticamente. Entonces quiero conectarme a la carga/descarga del servidor de datos ... – Caner

+3

, entonces tienes que monitorear si wifi habilita o no? si no, simplemente abra un cuadro de diálogo de conectividad wifi y llegue a la configuración de wifi. – user370305

Respuesta

1

me encontré con la siguiente solución:

1) Añadir configuración wifi preferido/APN (Access Point Name) a la configuración del teléfono
2) Habilitar wifi/APN
3) conexión se establecerá automáticamente

configuración wifi es str aightforward y la página siguiente muestra cómo se podría hacer:

How to programmatically create and read WEP/EAP WiFi configurations in Android?

configuración de APN es complicado. Android tiene algunas API ocultas que le permiten acceder/modificar estas configuraciones, y necesita usar Reflection para hacer esto. Esto podría romperse con las versiones futuras de Android.La siguiente página se explica cómo acceder/modificar los ajustes:

http://blogs.msdn.com/b/zhengpei/archive/2009/10/13/managing-apn-data-in-google-android.aspx

1

En efecto, puede activar o desactivar el wifi (consulte también this article) , pero no hay garantía de que si se enciende el wifi, habrá una conexión a Internet.

ConnectivityManager solo le permite inspeccionar el estado de conectividad actual. No puedes usarlo para habilitar una conexión. Además, ConnectivityManager no tiene conocimiento si una conexión de red activa es una conexión a Internet, pero es fácil verificar esto usted mismo (consulte this post por ejemplo).

0

Los enchufes son lo que necesita. Para obtener su información básica, léala aquí: http://en.wikipedia.org/wiki/Internet_socket No tiene que leerlo todo, pero creo que es importante que lea al menos todos los "problemas de implementación" para familiarizarse con los métodos de socket. Esos métodos son, por supuesto, implementados de manera diferente para cada plataforma (Windows, Android ...) pero generalmente hacen lo mismo en todas partes. Entonces, una vez que comprenda lo que hace cada uno, puede trabajar con sockets en cualquier plataforma con facilidad.

Este diagrama (De wiki) ayuda a demostrar el uso de enchufes: enter image description here

Usted está en el lado del cliente. Así que solo crea un socket y llama al método connect para la dirección IP de tu servidor.

Personalmente, nunca he usado enchufes en el desarrollo de Android. Pero creo que se debe utilizar esta clase: http://developer.android.com/reference/java/net/Socket.html

+0

Los sockets pueden ser una solución, pero tienen un nivel bastante bajo. Podría ser más fácil configurar un [ftp] (http://stackoverflow.com/questions/1567601/android-ftp-library) o [conexión http] (http://developer.android.com/reference/java/net /HttpURLConnection.html) si lo permite el servidor al que OP intenta conectarse. – THelper

+0

Los enchufes son básicos; Es mejor entenderlos, luego usa una clase de nivel superior que envuelve el socket en sí misma. Además, estas clases son receptáculos de envoltura para ser usados ​​en protocolos muy específicos. Como no sabemos qué protocolo necesita el póster original, no podemos decirle que use cualquier otro que no sea el socket básico. – Jong

+0

Pero esto no responde la pregunta. ¿Cómo estableceré el socket de conexión a Internet que usaré en primer lugar? – Caner

2

Si desea Sólo es necesario habilitar Wi-Fi puede utilizar este método:

private boolean changeWifiState(boolean state) { 
    final WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    wifi.setWifiEnabled(state); 
    return wifi.isWifiEnabled(); 
} 

comprobar los permisos necesarios para ello. Creo que se debe añadir estos permisos:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
+0

bien, pero ¿qué tal 3g? – Caner

+0

No es tan fácil. Y esta funcionalidad depende de la versión. Por ejemplo, puede ver aquí cómo hacer esto: http://stackoverflow.com/questions/3644144/how-to-disable-mobile-data-on-android – Yury

+0

Y debe saber que la conexión Wifi y de datos generalmente no pueden ser habilitado simultáneamente. – Yury

Cuestiones relacionadas