Android: conexión de red
Android permite que su aplicación se conecte a Internet o cualquier otra red local y le permite realizar operaciones de red.
Un dispositivo puede tener varios tipos de conexiones de red. Este capítulo se centra en el uso de una conexión de red Wi-Fi o móvil.
Comprobación de la conexión de red
Antes de realizar cualquier operación de red, primero debe verificar que está conectado a esa red o Internet, etc.Para este Android proporciona ConnectivityManagerclase. Necesita crear una instancia de un objeto de esta clase llamandogetSystemService()método. Su sintaxis se da a continuación:
ConnectivityManager check = (ConnectivityManager)
this.context.getSystemService(Context.CONNECTIVITY_SERVICE);
Una vez que crea una instancia del objeto de la clase ConnectivityManager, puede usar getAllNetworkInfométodo para obtener la información de todas las redes. Este método devuelve una matriz deNetworkInfo. Entonces tienes que recibirlo así.
NetworkInfo[] info = check.getAllNetworkInfo();
Lo último que debe hacer es verificar Connected Statede la red. Su sintaxis se da a continuación:
for (int i = 0; i<info.length; i++){
if (info[i].getState() == NetworkInfo.State.CONNECTED){
Toast.makeText(context, "Internet is connected
Toast.LENGTH_SHORT).show();
}
}
Aparte de estos estados conectados, hay otros estados que una red puede alcanzar. Se enumeran a continuación:
No Señor | Estado |
---|---|
1 | Conectando |
2 | Desconectado |
3 | Desconectando |
4 | Suspendido |
5 | Desconocido |
Realización de operaciones de red
Después de comprobar que está conectado a Internet, puede realizar cualquier operación de red. Aquí estamos obteniendo el html de un sitio web desde una URL.
Android proporciona HttpURLConnection y URLclass para manejar estas operaciones. Debe crear una instancia de un objeto de clase URL proporcionando el enlace del sitio web. Su sintaxis es la siguiente:
String link = "http://www.google.com";
URL url = new URL(link);
Después de eso necesitas llamar openConnectionmétodo de la clase url y recibirlo en un objeto HttpURLConnection. Después de eso, debe llamar alconnect método de la clase HttpURLConnection.
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
Y lo último que debe hacer es obtener el HTML del sitio web. Para esto usarásInputStream y BufferedReaderclase. Su sintaxis se da a continuación:
InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String webPage = "",data="";
while ((data = reader.readLine()) != null){
webPage += data + "\n";
}
Aparte de este método de conexión, hay otros métodos disponibles en la clase HttpURLConnection. Se enumeran a continuación:
No Señor | Método y descripción |
---|---|
1 |
disconnect() Este método libera esta conexión para que sus recursos se puedan reutilizar o cerrar |
2 |
getRequestMethod() Este método devuelve el método de solicitud que se utilizará para realizar la solicitud al servidor HTTP remoto. |
3 |
getResponseCode() Este método devuelve el código de respuesta devuelto por el servidor HTTP remoto. |
4 |
setRequestMethod(String method) Este método establece el comando de solicitud que se enviará al servidor HTTP remoto |
5 |
usingProxy() Este método devuelve si esta conexión usa un servidor proxy o no |
Ejemplo
El siguiente ejemplo demuestra el uso de la clase HttpURLConnection. Crea una aplicación básica que le permite descargar HTML desde una página web determinada.
Para experimentar con este ejemplo, debe ejecutarlo en un dispositivo real en el que esté conectado Internet wifi.
Pasos | Descripción |
---|---|
1 | Utilizará Android Studio IDE para crear una aplicación de Android en un paquete com.tutorialspoint.myapplication. |
2 | Modifique el archivo src / MainActivity.java para agregar el código de actividad. |
4 | Modifique el archivo XML de diseño res / layout / activity_main.xml agregue cualquier componente GUI si es necesario. |
6 | Modifique AndroidManifest.xml para agregar los permisos necesarios. |
7 | Ejecute la aplicación y elija un dispositivo Android en ejecución e instale la aplicación en él y verifique los resultados. |
Aquí está el contenido de src/MainActivity.java.
package com.tutorialspoint.myapplication;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class MainActivity extends ActionBarActivity {
private ProgressDialog progressDialog;
private Bitmap bitmap = null;
Button b1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button) findViewById(R.id.button);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkInternetConenction();
downloadImage("http://www.tutorialspoint.com/green/images/logo.png");
}
});
}
private void downloadImage(String urlStr) {
progressDialog = ProgressDialog.show(this, "", "Downloading Image from " + urlStr);
final String url = urlStr;
new Thread() {
public void run() {
InputStream in = null;
Message msg = Message.obtain();
msg.what = 1;
try {
in = openHttpConnection(url);
bitmap = BitmapFactory.decodeStream(in);
Bundle b = new Bundle();
b.putParcelable("bitmap", bitmap);
msg.setData(b);
in.close();
}catch (IOException e1) {
e1.printStackTrace();
}
messageHandler.sendMessage(msg);
}
}.start();
}
private InputStream openHttpConnection(String urlStr) {
InputStream in = null;
int resCode = -1;
try {
URL url = new URL(urlStr);
URLConnection urlConn = url.openConnection();
if (!(urlConn instanceof HttpURLConnection)) {
throw new IOException("URL is not an Http URL");
}
HttpURLConnection httpConn = (HttpURLConnection) urlConn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
resCode = httpConn.getResponseCode();
if (resCode == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
}catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return in;
}
private Handler messageHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
ImageView img = (ImageView) findViewById(R.id.imageView);
img.setImageBitmap((Bitmap) (msg.getData().getParcelable("bitmap")));
progressDialog.dismiss();
}
};
private boolean checkInternetConenction() {
// get Connectivity Manager object to check connection
ConnectivityManager connec
=(ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE);
// Check for network connections
if ( connec.getNetworkInfo(0).getState() ==
android.net.NetworkInfo.State.CONNECTED ||
connec.getNetworkInfo(0).getState() ==
android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() ==
android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED ) {
Toast.makeText(this, " Connected ", Toast.LENGTH_LONG).show();
return true;
}else if (
connec.getNetworkInfo(0).getState() ==
android.net.NetworkInfo.State.DISCONNECTED ||
connec.getNetworkInfo(1).getState() ==
android.net.NetworkInfo.State.DISCONNECTED ) {
Toast.makeText(this, " Not Connected ", Toast.LENGTH_LONG).show();
return false;
}
return false;
}
}
Aquí está el contenido de activity_main.xml.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="UI Animator Viewer"
android:id="@+id/textView"
android:textSize="25sp"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point"
android:id="@+id/textView2"
android:layout_below="@+id/textView"
android:layout_alignRight="@+id/textView"
android:layout_alignEnd="@+id/textView"
android:textColor="#ff36ff15"
android:textIsSelectable="false"
android:textSize="35dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_below="@+id/textView2"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:id="@+id/button"
android:layout_below="@+id/imageView"
android:layout_centerHorizontal="true"
android:layout_marginTop="76dp" />
</RelativeLayout>
Aquí está el contenido de Strings.xml.
<resources>
<string name="app_name">My Application</string>
</resources>
Aquí está el contenido de AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tutorialspoint.myapplication" >
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Intentemos ejecutar su aplicación. Supongo que ha conectado su dispositivo móvil Android real con su computadora. Para ejecutar la aplicación desde Android Studio, abra uno de los archivos de actividad de su proyecto y haga clic en el icono Ejecutar en la barra de herramientas. Antes de iniciar su aplicación, Android Studio mostrará la siguiente ventana para seleccionar una opción donde desea ejecutar su aplicación de Android.
Seleccione su dispositivo móvil como una opción y luego verifique su dispositivo móvil que mostrará la siguiente pantalla:
Ahora simplemente haga clic en el botón, comprobará la conexión a Internet y descargará la imagen.
El resultado sería el siguiente y ha obtenido el logotipo de Internet.