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>