{"id":136,"date":"2015-04-28T10:04:36","date_gmt":"2015-04-28T09:04:36","guid":{"rendered":"http:\/\/android.wp.w3.pt\/?p=136"},"modified":"2015-05-06T15:04:55","modified_gmt":"2015-05-06T14:04:55","slug":"testa-rede","status":"publish","type":"post","link":"http:\/\/android.w3.pt\/?p=136","title":{"rendered":"Testa Rede"},"content":{"rendered":"<p>Esta aplica\u00e7\u00e3o testa se a rede est\u00e1 dispon\u00edvel.<br \/>\nCaso n\u00e3o haja uma liga\u00e7\u00e3o de rede, a aplica\u00e7\u00e3o lan\u00e7a uma caixa de di\u00e1logo a informar o utilizador e pergunta-lhe se quer ativar a rede. Se o utilizador anuir, \u00e9 lan\u00e7ada uma janela do sistema para ativa\u00e7\u00e3o da rede. Caso contr\u00e1rio a aplica\u00e7\u00e3o termina.<br \/>\nQuando o utilizador desliga a janela de sistema, a aplica\u00e7\u00e3o volta a avaliar se tem rede ativa.<\/p>\n<p>Para lan\u00e7ar uma caixa de di\u00e1logo, \u00e9 utilizada a classe <a href=\"http:\/\/developer.android.com\/reference\/android\/app\/AlertDialog.Builder.html\">AlertDialog.Builder<\/a>. Existem muitas <a href=\"http:\/\/developer.android.com\/guide\/topics\/ui\/dialogs.html\">possibilidades gr\u00e1ficas<\/a> de utiliza\u00e7\u00e3o da classe AlertDialog.Builder.<\/p>\n<p>A fun\u00e7\u00e3o <strong>ativaRede2<\/strong> lan\u00e7a a janela de configura\u00e7\u00e3o do sistema para ativa\u00e7\u00e3o de uma liga\u00e7\u00e3o de rede. Para isso utiliza as instru\u00e7\u00f5es seguintes:<\/p>\n<pre>\r\n        Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS);\r\n        startActivityForResult(i,codigo);\r\n<\/pre>\n<p>Quando a janela de sistema de configura\u00e7\u00e3o da rede termina, a aplica\u00e7\u00e3o retoma a execu\u00e7\u00e3o na fun\u00e7\u00e3o <strong>onActivityResult<\/strong>. Aqui, devemos avaliar o valor do par\u00e2metro <strong>requestCode<\/strong> para saber de que Activity acab\u00e1mos de retornar. O par\u00e2metro <strong>requestCode<\/strong> cont\u00e9m o valor da vari\u00e1vel <strong>codigo<\/strong> que envi\u00e1mos para a fun\u00e7\u00e3o <strong>startActivityForResult<\/strong>.<\/p>\n<p>C\u00f3digo do layout gr\u00e1fico:<\/p>\n<pre style=\"border: 2px solid black; border-radius: 5px; box-shadow: 5px 5px 5px grey; background-color: lightyellow; margin: 10px; padding: 8px; font-family: monospace;\">\u00a0&lt;RelativeLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n\u00a0\u00a0\u00a0 xmlns:tools=\"http:\/\/schemas.android.com\/tools\" android:layout_width=\"match_parent\"\r\n\u00a0\u00a0\u00a0 android:layout_height=\"match_parent\" android:paddingLeft=\"@dimen\/activity_horizontal_margin\"\r\n\u00a0\u00a0\u00a0 android:paddingRight=\"@dimen\/activity_horizontal_margin\"\r\n\u00a0\u00a0\u00a0 android:paddingTop=\"@dimen\/activity_vertical_margin\"\r\n\u00a0\u00a0\u00a0 android:paddingBottom=\"@dimen\/activity_vertical_margin\" tools:context=\".TestaRede\"&gt;\r\n\r\n\u00a0\u00a0\u00a0 &lt;TextView\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:textSize=\"36sp\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:text=\"@string\/hello_world\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:id=\"@+id\/texto\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:layout_width=\"wrap_content\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:layout_height=\"wrap_content\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/&gt;\r\n\r\n&lt;\/RelativeLayout&gt;<\/pre>\n<p>C\u00f3digo da classe principal:<\/p>\n<pre style=\"border: 2px solid black; border-radius: 5px; box-shadow: 5px 5px 5px grey; background-color: lightyellow; margin: 10px; padding: 8px; font-family: monospace;\">\u00a0package com.se.testarede;\r\n\r\nimport android.app.AlertDialog;\r\nimport android.content.Context;\r\nimport android.content.DialogInterface;\r\nimport android.content.Intent;\r\nimport android.net.ConnectivityManager;\r\nimport android.net.NetworkInfo;\r\nimport android.provider.Settings;\r\nimport android.support.v7.app.ActionBarActivity;\r\nimport android.os.Bundle;\r\nimport android.util.Log;\r\nimport android.view.Menu;\r\nimport android.view.MenuItem;\r\nimport android.widget.TextView;\r\n\r\n\r\npublic class TestaRede extends ActionBarActivity {\r\n\r\n\u00a0\u00a0\u00a0 final int REQUEST_WIRELESS = 1;\r\n\u00a0\u00a0\u00a0 final int REQUEST_WIRELESS_2 = 2;\r\n\r\n\u00a0\u00a0\u00a0 @Override\r\n\u00a0\u00a0\u00a0 protected void onCreate(Bundle savedInstanceState) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 super.onCreate(savedInstanceState);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 setContentView(R.layout.activity_testa_rede);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 acao_principal();\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 void acao_principal() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 boolean haRede = isNetworkAvailable();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if(!haRede) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ativaRede(REQUEST_WIRELESS);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 TextView texto = (TextView)findViewById(R.id.texto);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 texto.setText(\"A rede j\u00e1 est\u00e1 ativa\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 public boolean isNetworkAvailable() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ConnectivityManager connectivityManager = (ConnectivityManager)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 getSystemService(Context.CONNECTIVITY_SERVICE);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return activeNetworkInfo != null;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 public void ativaRede(final int codigo) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 AlertDialog.Builder builder = new AlertDialog.Builder(this);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 builder.setMessage(getResources().getString(R.string.sync_ativar_rede))\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .setCancelable(false)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener(){\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 public void onClick(DialogInterface dialog, int id) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ativaRede2(codigo);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 })\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .setNegativeButton(getResources().getString(R.string.no), new DialogInterface.OnClickListener() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 public void onClick(DialogInterface dialog, int id) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 dialog.cancel();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 finish();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 });\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 AlertDialog alert = builder.create();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 alert.show();\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 public void ativaRede2(int codigo) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 startActivityForResult(i,codigo);\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 @Override\r\n\u00a0\u00a0\u00a0 protected void onActivityResult(int requestCode, int resultCode, Intent intent) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 super.onActivityResult(requestCode, resultCode, intent);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 switch(requestCode) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case REQUEST_WIRELESS:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Log.d(\"LOG\", \"onActivityResult().REQUEST_WIRELESS\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 acao_principal();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case REQUEST_WIRELESS_2:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ outra opera\u00e7\u00e3o\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 @Override\r\n\u00a0\u00a0\u00a0 public boolean onCreateOptionsMenu(Menu menu) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Inflate the menu; this adds items to the action bar if it is present.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 getMenuInflater().inflate(R.menu.menu_testa_rede, menu);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return true;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 @Override\r\n\u00a0\u00a0\u00a0 public boolean onOptionsItemSelected(MenuItem item) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Handle action bar item clicks here. The action bar will\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ automatically handle clicks on the Home\/Up button, so long\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ as you specify a parent activity in AndroidManifest.xml.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 int id = item.getItemId();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/noinspection SimplifiableIfStatement\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (id == R.id.action_settings) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return true;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return super.onOptionsItemSelected(item);\r\n\u00a0\u00a0\u00a0 }\r\n}<\/pre>\n<p>C\u00f3digo do Android Manifest:<\/p>\n<pre style=\"border: 2px solid black; border-radius: 5px; box-shadow: 5px 5px 5px grey; background-color: lightyellow; margin: 10px; padding: 8px; font-family: monospace;\">\u00a0&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n\u00a0\u00a0\u00a0 package=\"com.se.testarede\" &gt;\r\n\r\n\u00a0\u00a0\u00a0 &lt;uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" \/&gt;\r\n\r\n\u00a0\u00a0\u00a0 &lt;application\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:allowBackup=\"true\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:icon=\"@mipmap\/ic_launcher\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:label=\"@string\/app_name\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:theme=\"@style\/AppTheme\" &gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;activity\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:name=\".TestaRede\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:label=\"@string\/app_name\" &gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;intent-filter&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;action android:name=\"android.intent.action.MAIN\" \/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;category android:name=\"android.intent.category.LAUNCHER\" \/&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/intent-filter&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/activity&gt;\r\n\u00a0\u00a0\u00a0 &lt;\/application&gt;\r\n\r\n&lt;\/manifest&gt;<\/pre>\n<p>Ficheiro strings.xml:<\/p>\n<pre style=\"border: 2px solid black; border-radius: 5px; box-shadow: 5px 5px 5px grey; background-color: lightyellow; margin: 10px; padding: 8px; font-family: monospace;\">\u00a0&lt;resources&gt;\r\n\u00a0\u00a0\u00a0 &lt;string name=\"app_name\"&gt;TestaRede&lt;\/string&gt;\r\n\u00a0\u00a0\u00a0 &lt;string name=\"hello_world\"&gt;Ol\u00e1 Mundo!&lt;\/string&gt;\r\n\u00a0\u00a0\u00a0 &lt;string name=\"action_settings\"&gt;Configura\u00e7\u00e3o&lt;\/string&gt;\r\n\u00a0\u00a0\u00a0 &lt;string name=\"sync_ativar_rede\"&gt;Esta aplica\u00e7\u00e3o precisa de rede para funcionar. Quer ativar a rede agora?&lt;\/string&gt;\r\n\u00a0\u00a0\u00a0 &lt;string name=\"yes\"&gt;Sim&lt;\/string&gt;\r\n\u00a0\u00a0\u00a0 &lt;string name=\"no\"&gt;N\u00e3o&lt;\/string&gt;\r\n&lt;\/resources&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Esta aplica\u00e7\u00e3o testa se a rede est\u00e1 dispon\u00edvel. Caso n\u00e3o haja uma liga\u00e7\u00e3o de rede, a aplica\u00e7\u00e3o lan\u00e7a uma caixa de di\u00e1logo a informar o utilizador e pergunta-lhe se quer ativar a rede. Se o utilizador anuir, \u00e9 lan\u00e7ada uma janela do sistema para ativa\u00e7\u00e3o da rede. Caso contr\u00e1rio a aplica\u00e7\u00e3o termina. Quando o utilizador [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/android.w3.pt\/index.php?rest_route=\/wp\/v2\/posts\/136"}],"collection":[{"href":"http:\/\/android.w3.pt\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/android.w3.pt\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/android.w3.pt\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/android.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=136"}],"version-history":[{"count":7,"href":"http:\/\/android.w3.pt\/index.php?rest_route=\/wp\/v2\/posts\/136\/revisions"}],"predecessor-version":[{"id":144,"href":"http:\/\/android.w3.pt\/index.php?rest_route=\/wp\/v2\/posts\/136\/revisions\/144"}],"wp:attachment":[{"href":"http:\/\/android.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/android.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=136"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/android.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}