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>