Testa Rede


Esta aplicação testa se a rede está disponível.
Caso não haja uma ligação de rede, a aplicação lança uma caixa de diálogo a informar o utilizador e pergunta-lhe se quer ativar a rede. Se o utilizador anuir, é lançada uma janela do sistema para ativação da rede. Caso contrário a aplicação termina.
Quando o utilizador desliga a janela de sistema, a aplicação volta a avaliar se tem rede ativa.

Para lançar uma caixa de diálogo, é utilizada a classe AlertDialog.Builder. Existem muitas possibilidades gráficas de utilização da classe AlertDialog.Builder.

A função ativaRede2 lança a janela de configuração do sistema para ativação de uma ligação de rede. Para isso utiliza as instruções seguintes:

        Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
        startActivityForResult(i,codigo);

Quando a janela de sistema de configuração da rede termina, a aplicação retoma a execução na função onActivityResult. Aqui, devemos avaliar o valor do parâmetro requestCode para saber de que Activity acabámos de retornar. O parâmetro requestCode contém o valor da variável codigo que enviámos para a função startActivityForResult.

Código do layout gráfico:

 <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=".TestaRede">

    <TextView
        android:textSize="36sp"
        android:text="@string/hello_world"
        android:id="@+id/texto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</RelativeLayout>

Código da classe principal:

 package com.se.testarede;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.provider.Settings;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;


public class TestaRede extends ActionBarActivity {

    final int REQUEST_WIRELESS = 1;
    final int REQUEST_WIRELESS_2 = 2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_testa_rede);

        acao_principal();
    }

    void acao_principal() {
        boolean haRede = isNetworkAvailable();
        if(!haRede) {
            ativaRede(REQUEST_WIRELESS);
        } else {
            TextView texto = (TextView)findViewById(R.id.texto);
            texto.setText("A rede já está ativa");
        }
    }

    public boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null;
    }

    public void ativaRede(final int codigo) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(getResources().getString(R.string.sync_ativar_rede))
                .setCancelable(false)
                .setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener(){
                    public void onClick(DialogInterface dialog, int id) {
                        ativaRede2(codigo);
                    }
                })
                .setNegativeButton(getResources().getString(R.string.no), new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                        finish();
                    }
                });
        AlertDialog alert = builder.create();
        alert.show();
    }

    public void ativaRede2(int codigo) {
        Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
        startActivityForResult(i,codigo);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        switch(requestCode) {
            case REQUEST_WIRELESS:
                Log.d("LOG", "onActivityResult().REQUEST_WIRELESS");
                acao_principal();
                break;
            case REQUEST_WIRELESS_2:
                // outra operação
                break;
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_testa_rede, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Código do Android Manifest:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.se.testarede" >

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".TestaRede"
            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>

Ficheiro strings.xml:

 <resources>
    <string name="app_name">TestaRede</string>
    <string name="hello_world">Olá Mundo!</string>
    <string name="action_settings">Configuração</string>
    <string name="sync_ativar_rede">Esta aplicação precisa de rede para funcionar. Quer ativar a rede agora?</string>
    <string name="yes">Sim</string>
    <string name="no">Não</string>
</resources>

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *