Вы находитесь на странице: 1из 15

MATERIA:

ANDROID STUDIO
UNIDAD:
6

TEMA:
WIFI MEJORADA

ALUMNA:
SOTO URBINA EVA GUADALUPE
DOCENTE:
AZAMAR PALMA IVAN

FECHA DE ENTREGA:
05/JUNIO/2019

1
MARCO TEORICO ...................................................................................................................... 2
WIFI MANAGER........................................................................................................................... 2
ASYNCTASK. ............................................................................................................................... 2
WIDGETS ...................................................................................................................................... 3
CAPTURAS DE PANTALLA ..................................................................................................... 3
MAIN2ACTIVITY.JAVA ............................................................................................................ 12
CLASE SQLITE.JAVA .............................................................................................................. 12
RED.JAVA................................................................................................................................... 13
ARRAYADAPTERRED.JAVA ................................................................................................. 14
CONCLUSIÓN ............................................................................................................................ 15
BIBLIOGRAFÍA .......................................................................................................................... 15

MARCO TEORICO
WiFi es una tecnología de comunicación inalámbrica que permite conectar a internet
equipos electrónicos, como computadoras, tablets, celulares, etc., mediante el uso de
radiofrecuencias o infrarrojos para la trasmisión de la información.
WiFi o WiFi es originalmente una abreviación de la marca comercial Wireless Fidelity, que en inglés
significa ‘fidelidad sin cables o inalámbrica’. En español, lo aconsejable es escribir WiFi sin guion, en
minúscula y sin cursivas. Además, se puede emplear de igual modo en masculino o femenino,
dependiendo de la preferencia y del contexto: la (zona) WiFi, el (sistema) WiFi.

WIFI MANAGER
Esta clase proporciona la API principal para administrar todos los aspectos de la conectividad
WiFi. Se ocupa con varias categorías como:
 La lista de redes configuradas. La lista se puede ver y actualizar, y los atributos de las
entradas individuales se pueden modificar.
 La red WiFi actualmente activa, si la hay. La conectividad se puede establecer o demoler, y
se puede consultar información dinámica sobre el estado de la red.
 Resultados de las exploraciones de puntos de acceso, que contienen suficiente información
para tomar decisiones sobre a qué punto de acceso se debe conectar.
 Define los nombres de varias acciones de Intención que se transmiten ante cualquier tipo de
cambio en el estado de WiFi.

ASYNCTASK.
Permite el uso correcto y fácil del hilo de la interfaz de usuario. Esta clase le permite realizar
operaciones en segundo plano y publicar resultados en el subproceso de la interfaz de usuario sin
tener que manipular subprocesos y / o controladores. Una tarea asíncrona se define mediante un
cálculo que se ejecuta en un subproceso en segundo plano y cuyo resultado se publica en el
subproceso de la interfaz de usuario. Una tarea asíncrona se define por 3 tipos genéricos, llamada
Params, Progressy Result, y 4 pasos, llama onPreExecute, doInBackground, onProgressUpdatey
onPostExecute.

SHAREDPREFERENCE
Estos pares de datos (clave y valor) son almacenados en ficheros que luego pueden
permanecer privados es decir que solo pueden ser usados por la aplicación que los ha

2
creado esto se logra con el parámetro Context.MODE_PRIVATE o pueden también
crearse públicos para poder ser compartidos con otras aplicaciones que se encuentren en
el dispositivo, para ello usamos el parámetro Context.MODE_WORLD_READABLE o
Context.MODE_WORLD_READABLE Y CONTEXT.MODE_WORLD_WRITEABLE: más
adelante veremos más sobre comó usar estos parámetros.
Nota Importante: A partir del API Level 17 los parámetros Context.MODE_WORLD_READABLE y
Context.MODE_WORLD_WRITEABLE ha sido deprecados por que podrían generar un hoyo de
seguridad en las aplicaciones, por lo que no es recomendable su uso.

WIDGETS
Los widgets de Android son pequeñas aplicaciones o complementos de otras apps que se
muestran en la pantalla principal o escritorio de tu celular o tablet y que sirven para obtener
información o realizar acciones habituales sin abrir la app, entre otras muchas funciones
posibles.
Según Google, hay cuatros tipos de widget de Android: informativos, colecciones (que muestran
varios elementos a la vez como imágenes, mensajes o correos), de control (botones que ejecutan
acciones recurrentes) o híbridos, que tienen las características de los anteriores.

CAPTURAS DE PANTALLA

Primero debemos crear un nuevo proyecto donde ocuparemos activity.xml donde colocaremos 5
botones donde daremos el funcionamiento de que estará realizando nuestra app que son
Encender, Apagar, Buscar, Guardar, Mostrar

3
Holder lo agregaremos este sirve para conseguir un procesamiento más rápido de las
listas mejorando así la fluidez y, por consiguiente, la experiencia de usuario.

Se colocara un ArrayList para almacenar nuestra información obtenida en este caso son las redes
visibles que hay en cierto punto

4
Ocupamos Query para hacer una consulta del resultado que obtenemos que en este caso es la red
encontrada

Tambien se utilizó WiFi manager para la gestión de conexión de WiFi que se usa para encontrar de
una manera más fácil las redes que están en nuestro entorno

5
Creamos nuestra Base de datos donde se almacenaran nuestras redes obtenidas con la finalidad
de tener un mejor gestor de redes.

En nuestra activity.xml daremos el diseño y lo que llevara nuestros botones para darle el
funcionamiento como se debe en este caso serán 5 las funciones son Encender, Apagar, Buscar,
Guardar y Mostrar que estos estarán en un LinearLayout.

6
Y también colocaremos TextView para que se puedan observar las redes encontradas de manera
sencilla

En la primera imagen de nuestra aplicación nos aparece encendida, en segundo lugar oprimiremos
el botón de apagado lo cual hará su funcionamiento de desconectar nuestra red WiFi posterior se
hará su funcionamiento de buscar nuestras redes como lo muestra en la imagen después se
presionara el botón de guardar y por automático se almacenaran las redes encontradas y al final
se vera como quedaron registradas nuestras redes.

7
Aquí vemos el resultado de la función de la aplicación de
wifi mejorado como busca guarda y apaga el WiFi
MainActivity.java
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements


View.OnClickListener{

WifiManager wifi;
Button on,off,buscar,bd,guardar;
TextView status,redes;

boolean tarea = false;


int contador = 0;
int encendidoApagado = 0;

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

widgets();

wifi = (WifiManager)
getApplicationContext().getSystemService(Context.WIFI_SERVICE);
verificarStatus();

8
@Override
protected void onPause() {
super.onPause();
guardarStatus();
}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnOn:
wifiOn();
break;
case R.id.btnOff:
wifiOff();
break;
case R.id.btnBuscar:
if (wifi.isWifiEnabled()){
if (tarea == false){
tarea = true;
msg("Iniciando busqueda");
new MyAsyncTask().execute();
}else {
tarea = false;
msg("Busqueda detenida");
}
}else {
msg("Debe encender el Wifi");
}
break;
case R.id.btnBd:
Intent intentmain = new Intent(this,Main2Activity.class);
startActivity(intentmain);
break;
case R.id.btnGuardar:
if (wifi.isWifiEnabled()){
ArrayList<Red> reds = buscar();
guardarRedes(reds);
}else {
msg("Debes encender el Wifi");
}
break;
}

public void widgets(){


on = (Button) findViewById(R.id.btnOn);
on.setOnClickListener(this);
off = (Button) findViewById(R.id.btnOff);
off.setOnClickListener(this);
buscar = (Button) findViewById(R.id.btnBuscar);
buscar.setOnClickListener(this);
bd = (Button) findViewById(R.id.btnBd);
bd.setOnClickListener(this);
status = (TextView) findViewById(R.id.txtStatus);
redes = (TextView) findViewById(R.id.txtDipositivosWifi);
guardar = (Button) findViewById(R.id.btnGuardar);
guardar.setOnClickListener(this);
}

public void wifiOn(){


if (!wifi.isWifiEnabled()){

9
msg("Encendiendo Wifi");
wifi.setWifiEnabled(true);
status.setText("Encendido");
encendidoApagado = 1;
}else {
msg("Debes apagar el Wifi");
}
}

public void wifiOff(){


if (wifi.isWifiEnabled()){
msg("Apagando Wifi");
wifi.setWifiEnabled(false);
status.setText("Apagado");
encendidoApagado = 2;
}else {
msg("Debes encender el wifi");
}
}

public ArrayList<Red> buscar(){

ArrayList<Red> reds = new ArrayList<>();


if(wifi.isWifiEnabled()){
List<WifiConfiguration> lista = wifi.getConfiguredNetworks();
for (WifiConfiguration w: lista){
//redes.append(w.SSID+" "+w.BSSID+" "+w.networkId+"\n");
reds.add(new Red(w.networkId,w.SSID,w.BSSID));
}
}else{
msg("Debes enceder en Wifi");
}
return reds;
}

public void guardarRedes(ArrayList<Red> reds){

Sqlite sqlite = new Sqlite(getApplicationContext(),"wifi",null,1);


SQLiteDatabase db = sqlite.getWritableDatabase();

for (Red red: reds){


ContentValues values = new ContentValues();
values.put("idnetwork",String.valueOf(red.getIdNetworkId()));
values.put("ssid",red.getSSID());
values.put("bssid",red.getBSSID());
try {
db.insert("Red",null,values);
}catch (Exception e){
msg("Error: "+e.getMessage());
}
}
msg("Redes guardadas");
}

public void guardarStatus(){


SharedPreferences preferences = getSharedPreferences("wifiStatus",
Context.MODE_PRIVATE);

if (preferences != null){
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("status",encendidoApagado);
editor.commit();
}

10
}

public void verificarStatus(){


SharedPreferences preferences = getSharedPreferences("wifiStatus",
Context.MODE_PRIVATE);

Integer wifistatus = preferences.getInt("status",0);


if (wifistatus == 1){//Encendido
if (!wifi.isWifiEnabled()){
msg("Encendiendo Wifi");
wifi.setWifiEnabled(true);
status.setText("Encendido");
encendidoApagado = 1;
}else{
status.setText("Encendido");
encendidoApagado = 1;
}
}else if (wifistatus == 2){//Apagado
if (wifi.isWifiEnabled()){
msg("Apagando Wifi");
wifi.setWifiEnabled(false);
status.setText("Apagado");
encendidoApagado = 2;
}else {
status.setText("Apagado");
encendidoApagado = 2;
}
}
}

public void msg(String mensaje){

Toast.makeText(getApplicationContext(),""+mensaje,Toast.LENGTH_SHORT).show();
}

class MyAsyncTask extends AsyncTask<String,String,String> {

@Override
protected String doInBackground(String... params) {

while (tarea){
List<WifiConfiguration> DataNetwork =
wifi.getConfiguredNetworks();
int net = 0;
while (tarea && net < DataNetwork.size()){

WifiConfiguration w = DataNetwork.get(net);
String red = w.networkId + " " + w.SSID + " " + w.BSSID+"\n";
try {
Thread.sleep(600);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(red);
net++;
contador++;
}
contador = 0;
}
return "Red";
}

@Override

11
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);

if (contador == 0){
redes.setText("");
}
String red = values[0];
redes.append(red);
}
}

Main2Activity.java
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;

public class Main2Activity extends AppCompatActivity {

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

ListView view = (ListView) findViewById(R.id.listReds);


TextView txtTotal = (TextView) findViewById(R.id.txtTotal);

Sqlite sql = new Sqlite(getApplicationContext(),"wifi",null,1);


SQLiteDatabase db = sql.getWritableDatabase();

ArrayList<Red> reds = new ArrayList<>();

String[]columns = {"idnetwork","ssid","bssid"};

Cursor c = db.query("Red",columns,null,null,null,null,null);
for (c.moveToFirst();!c.isAfterLast();c.moveToNext()){
reds.add(new
Red(Integer.valueOf(c.getString(0)),c.getString(1),c.getString(2)));
}

int total = reds.size();


txtTotal.setText("Total de registros: "+total);

ArrayAdapterRed adapterRed = new ArrayAdapterRed(this,R.layout.red,reds);


view.setAdapter(adapterRed);
}
}

Clase Sqlite.java
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class Sqlite extends SQLiteOpenHelper {

12
String table = "CREATE TABLE IF NOT EXISTS Red(id INTEGER PRIMARY KEY
AUTOINCREMENT," +
" idnetwork TEXT," +
" ssid TEXT," +
" bssid TEXT)";

public Sqlite(Context context, String name, SQLiteDatabase.CursorFactory


factory, int version) {
super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(table);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS Red");
onCreate(db);
}
}

Red.java
public class Red {

private int idNetworkId;


private String SSID;
private String BSSID;

public Red(int idNetworkId, String SSID, String BSSID) {


this.idNetworkId = idNetworkId;
this.SSID = SSID;
this.BSSID = BSSID;
}

public Red(){
}

public int getIdNetworkId() {


return idNetworkId;
}

public void setIdNetworkId(int idNetworkId) {


this.idNetworkId = idNetworkId;
}

public String getSSID() {


return SSID;
}

public void setSSID(String SSID) {


this.SSID = SSID;
}

public String getBSSID() {


return BSSID;
}

public void setBSSID(String BSSID) {

13
this.BSSID = BSSID;
}
}

ArrayAdapterRed.java
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.ArrayList;

public class ArrayAdapterRed extends ArrayAdapter<Red> {

Context context;
int layoutResource;
ArrayList<Red> lista = null;

public ArrayAdapterRed(Context context,int layoutResource,


ArrayList<Red> lista) {
super(context, layoutResource, lista);

this.context = context;
this.layoutResource = layoutResource;
this.lista = lista;
}

public View getView(int posicion, View convertView, ViewGroup


parent){
View row = convertView;
HolderRed holder = null;

if (row == null){
LayoutInflater inflater =
((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResource,parent,false);

holder = new HolderRed();


//holder.idnetwork = (TextView)
row.findViewById(R.id.textView3);
holder.ssid = (TextView) row.findViewById(R.id.textView4);
holder.bssid = (TextView) row.findViewById(R.id.textView5);
row.setTag(holder);

}else{
holder = (HolderRed) row.getTag();
}

Red red = lista.get(posicion);


//holder.idnetwork.setText(String.valueOf(red.getIdNetworkId()));
holder.ssid.setText(red.getSSID());
holder.bssid.setText(red.getBSSID());

return row;
}

static class HolderRed{


//TextView idnetwork;

14
TextView ssid;
TextView bssid;
}
}

CONCLUSIÓN

El crear este tipo de aplicaciones es fundamental, ya que nos abrimos a crear nuevas app
aunque tengamos errores, en el caso de WiFi se hizo la su funcionamiento de encender,
apagar buscar, mostrar y guardar con 5 botones para darle un funcionamiento útil y eficaz,
fue una app con uso de SharedPreferences , SQLite, widgets fue una combinación de los
temas vistos en clase donde lo pusimos en práctica y que los tuvimos que realizar poco a
poco para poder crear esta app ya que fue un reto, y lo pudimos trabajar de una manera
excelente, como también vimos el uso de esta app al momento de prender o iniciar la
búsqueda de redes te mostraban las redes que están a su alcance de nuestro móvil con el
fin de conocer que redes o cuantas redes existe en la zona, además el uso de WiFi es una
parte esencial que ya está, con nosotros día con día porque lo ocupamos para buscar una
tarea comunicarnos con otra gente o bien para poder hacer registros en una base de dato
que esta almacenada en alguna nube o bien simplemente para poder ver un video de
música, como podemos observar Android, como cualquiera de los demás sistemas
operativos móviles, dispone de un asistente de redes inalámbricas que nos permite
conectarnos fácilmente a cualquier red que se encuentre a nuestro alcance, sin embargo,
la información que nos brinda este asistente es bastante pobre centrándose principalmente
en el SSID y la señal aproximada que recibimos.
Existen aplicaciones que nos permiten obtener mucha más información sobre todas las redes que
se encuentran a nuestro alcance. Estas aplicaciones se llaman gestores de redes WiFi y WiFi
Manager es una de las más completas que podemos encontrar para sistemas operativos Android.
Como podemos ver con las tareas asíncronas es el mecanismo claro y fácil de comprender pero
debemos de tener práctica día con día para que tengamos una buena utilidad, los widgets es una
parte importante como pudimos ver ya que se permite la libertad de introducir cajas con su
determinada función en diferente área

BIBLIOGRAFÍA

(SharedPreference, s.f.) http://www.sgoliver.net/blog/preferencias-en-android-i-shared-


preferences/
(Sqlite, s.f.)https://openwebinars.net/blog/sqlite-para-android-la-herramienta-definitiva/
(Android, s.f.)https://academiaandroid.com/aplicacion-android-obtencion-datos-conexion-wifi/
(AsynTacks, s.f.)http://www.hermosaprogramacion.com/2014/12/android-asynctask-hilos/
(Manager, s.f.) https://androidfacil.org/wifi-manager-mejorar-wi-fi-android/
(Android M. e., s.f.) http://www.androidcurso.com/index.php/recursos/42-unidad-9-
almacenamiento-de-datos/310-los-metodos-query-y-rawquery

15