Mostrando entradas con la etiqueta android. Mostrar todas las entradas
Mostrando entradas con la etiqueta android. Mostrar todas las entradas

miércoles, 26 de julio de 2017

Como importar una libreria en android studio

hola amig@s programadores hoy veremos un tema muy interesante, he visto en los programadores novatos tener mucho problemas a la hora que quieren exportar sus librerías externas mejor dicho los archivos .jar  y cuando buscan información al respecto y luego no les funciona su copia y pega empiezan a llorar buuuu, así que hoy lo explicaremos de forma detallada y con manzanitas para dar por cerrado este tema.

Empezamos nos llevara un aproximado de 3 minutos.

Cómo importar librerías .jar en Android Studio



  • Una vez situado en tu proyecto Android Studio, ve a la carpeta "libs" en caso de no existir crea la carpeta a la altura de build y src.



  • Una vez hayas creado esta carpeta, ya podrás añadir todos tus archivos con extensión .jar


      Pero esto no termina aquí, porque el siguiente paso es muy importante, necesitas añadir las dependencias a Build.gradle (Module:app).



  • En este ejemplo añadimos la librería frutas.jar Para ello, añadimos el siguiente código en Build.gradle, en dependencies(). Se hace igual para cualquier librería:
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:25.3.0'
    compile files('libs/frutas.jar')
}

Si analizamos un poco nos damos cuenta que empezamos con el compile files luego le indicamos que esta en la carpeta libs para luego indicarle que le haremos referencia al archivo frutas.jar

AH! PILLIN  aun no acabamos falta lo mas importante 

  • Y por último, tras añadir este trocito de código, necesitas hacer la sincronización del proyecto con el gradle. Te saldrá un aviso en amarillo en la parte superior, puedes hacer clic en “Sync Project with Gradle Files“.

Lo vemos en la siguiente imagen:

                                                           Clic para agrandar la imagen


No tendremos que hacer nada más que esto para tener las librerías que necesitemos en Android. Bueno cuídense mucho y no se rompan la cabeza:

NOTA: una vez un usuario siguió esta guía y ya quería llorar porque no le funcionaba, adivinen que? descargo mal la librería jajajajaja xD


ENLACES DE INTERÉS:


Como importar fuentes a android studio

Hola amig@s programadores siempre a la hora de hacer un proyecto necesitamos darle la mejor vista que podemos y entre ellas siempre es bueno ver la escritura, es un detalle que podria traerte mas cliente o impresionar a tu jefe. Para ello hoy veremos Como insertar tipos de fuentes en Android Studio.

Bien sin mas rodeos empezamos con el Tuto que nos llevara aproximadamente dos minutos:


  • Sitúate en app > src > main.
  • Crea el directorio “assets” (a la misma altura de java y res). Dentro de assets, crea la carpeta “fonts”, y a su vez, dentro, crea/importa el archivo “nombre_fuente.ttf”.






Es en la carpeta fonts, dónde tendrás que arrastrar la fuente concreta que quieras usar con la extensión .ttf. Si buscas por la red, encontrarás un montón de ZIP con fuentes, que puedes arrastrar y colocar dentro de assets, para luego solo llamar a las fuentes que tu quieras desde la aplicación. Si tienes dudas con algo de esto, puedes preguntarnos abajo en los comentarios.


¿CÓMO USO LA FUENTE QUE ACABO DE IMPORTAR?

Typeface face=Typeface.createFromAsset(getAssets(),"fonts/nombre_fuente.ttf");
txtV.setTypeface(face);

Tan solo tendrás que pegar ese código en la Activity en que quieras usar la nueva fuente. Y acuérdate de cambiar el nombre anterior por el nombre de tu fuente, podrás importar las fuentes que quieras. ¡Espero que te haya servido y que lo disfrutes!


Y con eso hemos terminado amigos, cuídense y nos vemos en un próximo tutorial.


viernes, 17 de febrero de 2017

Como pedir ayuda




Para los que necesiten un poco de ayuda con sus proyectos, deben seguir las siguientes reglas:

1.- Darle like a  cualquier fanpage y subscribirse al canal de youtube (pues porque ayudaría a un desconocido verdad?)

2.-Tienes diferentes opciones de hacer llegar tus preguntas, en los fanpage, en el formulario de contacto que esta al final o escribirnos a androdfast@gmail.com

3.-No hacemos tus trabajos del colegio, si necesitas ayuda es porque te has estancado en alguna parte de tu código y nosotros te podemos ayudar a solucionarlo. (debes tener algo de código para poder ayudarte).

4.- Debes ser especifico con tu problema y si es posible envía imágenes o el código para poder ayudar, no somos psíquicos. 

5.- Usa un lenguaje adecuado para que cualquier administrador tenga la disposición de ayudarte, recuerda que la ayuda es GRATIS

jueves, 18 de agosto de 2016

Como jugar pokemon go en un celular de gama baja

Hola amigos, les quiero agradecer a los que se toman la molestia de quitar los adblock, pues este blog se mantiene de la publicidad y no es que sea millonario, pero con eso me basta para comprar un cafe y una rebanada de pizza mientras hago tutoriales para ustedes. Ahora este es un blog mas orientado a la programación pero, algunos de los suscriptores han estado insistiendo que haga un tutorial sobre este tema. Bien hoy vamos a ver como instalar pokemon go en un celular de gama baja.

Bien para este tutorial utilizaremos:
-Un celular LG l20 pueden ver sus características aquí son super bajas.
- Aplicación GlTools
- Aplicación kingroot
NOTA: Las aplicaciones pueden descargarla de san google, si intentas descargar pokemon go desde tu celular no podras, debes ir a la playstore via web y debes logearte y darle instalar, luego te metes a tu celular y buscas tus aplicaciones en el playstore y estará ahí listo para descargar sin ningún problema.

No voy hablar de la instalación de Kingroot porque es algo bien sencillo y sirve para tener permisos de root, hay miles de tutoriales de como instalarlo.

Luego de haber descargado kingroot, debes instalar GlTools Luego debes darles permisos root con KingRoot a GlTools.
Al momento de iniciar, les va mostrar tres casillas y deben marcarlas todas.(ojo si no le dan permisos de root no podrás usar GlTolls)

Luego le dan en Install y esperan a que se reinicie solo.
Una ves reiniciada debemos ir otra vez a GlTools y buscar a Pokemon Go y hacer clic.


Debemos marcar las dos opciones como se muestra en la siguiente imagen



Enable texture decomprension =  ALL
Enable tesxture recomprension = decompressed only
Downscale texture = 0.125x (aclaro que hay veces que ir jugando con las resuluciones para que no se cuelgue)

Como les comentaba en la imagen de arriba hay que jugar con la texture en el celular de un amigo en gama baja lo deje en 256x 256 debes ir probando

Por ultimo debes marcar use fake GPU info

Cuando hagan clic en use template, les saldra la siguiente pantalla debene elegir el SGX 540 o el SG544MP

Y con eso terminamos ahora deben cerrar e ir a pokemon go, ya les andara, se vera con una resolucion baja y cada vez que les salga un mensaje demorara en cerrarse un poco pero al fin y al cabo podrán jugar, les recomiendo que no jueguen por mucho tiempo, deben hacer descansar su celular recuerden que están obligandolo a trabajar en una gama que no han sido creados, también deben tener descargado y actualizado su google map y stree view y deben actualizar su android a 4.4 como mínimo.

viernes, 12 de agosto de 2016

como darle seguridad a una aplicacion en android


Hoy hablaremos un tema muy importante, como brindarle seguridad a nuestras aplicaciones hechas en android. Empezamos comentando algo básico, usar términos como 100% seguro u 80% son palabras bonitas inventadas para el marketing de un producto, para los que están en las carreras de informática, software y afines entenderán que hablar de seguridad en este contexto es muy efímero y no hay nada seguro, pues lo que es para hoy una solución, con el avance de la tecnología mañana seria inservible. 
El sistema operativo Android tiene un montón de características de seguridad incorporadas, tales como la zona de pruebas de aplicaciones, protección contra ataques de desbordamiento de búfer, y áreas de memoria segregadas para instrucciones de programas y datos. Y si hablamos de simples aplicaciones que no comprometen a los accesos  de archivos u datos del sistema es de por si muy seguro.

Si estás desarrollando una aplicación más compleja, sin embargo, es tu responsabilidad para que sea seguro y proteger la privacidad de tus usuarios. En este artículo, voy a enumerar algunas de las mejores prácticas que puede seguir para construir una aplicación para Android,seguro de que no se filtre datos o permisos, y es, en general, menos vulnerables a las aplicaciones maliciosas que puedan estar instalados en el el dispositivo del usuario.

1. Uso de almacenamiento interno de datos confidenciales
Cada aplicación para Android tiene un directorio de almacenamiento interno asociado a él cuya trayectoria se basa en el nombre del paquete de la aplicación. Archivos dentro de este directorio son muy seguros, ya que utilizan el modo de creación de archivos MODE_PRIVATE por defecto. Esto significa que los archivos no pueden ser accedidos por cualquier otra aplicación en el dispositivo. Por lo tanto, es un mejor lugar para almacenar todos los datos sensibles de su aplicación en el directorio de almacenamiento interno.

Para determinar la ruta absoluta del directorio de almacenamiento interno de su aplicación, se recomienda que utilice el método getFilesDir (). Una vez que conozca su camino, haciendo referencia a los archivos dentro, es tan simple como hacer referencia a archivos dentro de cualquier otro directorio. Por ejemplo, he aquí cómo se podría hacer referencia a un archivo llamado myfile.dat en el directorio de almacenamiento interno de su aplicación:

File myFile = new File(getFilesDir(), "myfile.dat");

2. Cifrar los datos en almacenamiento externo
La capacidad de almacenamiento interno de un dispositivo Android es a menudo limitada. Por lo tanto, a veces, es posible que no haya más remedio que almacenar datos sensibles en medios de almacenamiento externos, tales como una tarjeta SD extraíble.

Debido a que los datos en medios de almacenamiento externo se puede acceder directamente por los usuarios y otras aplicaciones en el dispositivo, es importante que usted lo almacene en un formato codificado. Uno de los algoritmos de cifrado más populares utilizados por los desarrolladores de hoy en día es AES, siglas de Advanced Encryption Standard, con un tamaño de clave de 256 bits.


Escribir código para cifrar y descifrar datos de la aplicación utilizando el paquete de javax.crypto, que se incluye en el SDK de Android, puede ser confuso. Por lo tanto, la mayoría de los desarrolladores prefieren usar las bibliotecas de terceros, tales como la biblioteca Facebook's Conceal, que son por lo general mucho más fácil trabajar con ellos.


3. El uso de HTTPS
Este tema ya lo hemos tratado en otros artículos donde hacíamos nuestras conexiones desde la aplicación hacia una web service por medio de Https.
Todas las comunicaciones entre la aplicación y los servidores deben ser a través de una conexión HTTPS, preferentemente utilizando la clase HttpsURLConnection. Si cree que el uso de HTTP para datos está bien, se equivoca.

Muchos usuarios de Android se conectan a varios puntos de acceso Wi-Fi en las zonas comunes abiertas todos los días. Algunos de estos puntos de acceso podrían ser maliciosas. Un punto de acceso malicioso puede modificar fácilmente el contenido de tráfico HTTP para que su aplicación se comporta de una manera inesperada, o, peor aún, inyectar anuncios o explota en ella.

Mediante el uso de HTTPS, siempre y cuando el servidor está configurado con un certificado expedido por una autoridad de certificación de confianza, como DigiCert o GlobalSign, puede estar seguro de que el tráfico de su red es segura tanto contra el espionaje y los ataques man-in-the-middle.


Si su aplicación tiene una gran cantidad de código de red y que tienen miedo de que sin darse cuenta puede ser el envío de algunos datos como texto plano, se debe considerar el uso de nogotofail, una herramienta de código abierto construido por Google para encontrar este tipo de errores.


4. Uso GCM en lugar de SMS
Antes, cuando GCM, abreviatura de Google Cloud Messaging,"Google mensajería en la nube", no existía, muchos desarrolladores estaban usando SMS para enviar datos de sus servidores para sus aplicaciones. Hoy en día, esta práctica ha desaparecido en gran parte.

Si usted es uno de los desarrolladores que todavía no se ha hecho el cambio de SMS a GCM, usted debe saber que el protocolo SMS no está codificado ni es seguro contra ataques de suplantación. Lo que es más, un SMS puede ser leído por cualquier aplicación en el dispositivo del usuario que tiene el permiso READ_SMS.


GCM es mucho más seguro y es la forma preferida para empujar mensajes a una aplicación, porque todas las comunicaciones GCM están encriptadas . Ellos se autentican utilizando fichas de registro actualiza de forma regular en el lado del cliente y una clave de API única en el lado del servidor.

5. No soliciten datos personales
La privacidad de los usuarios se le da mucha importancia en estos días. De hecho, hay leyes, como la Directiva de Protección de Datos de la Unión Europea y la Ley de Protección de Información Personal y Documentos Electrónicos de Canadá, los cuales exigen la protección de la privacidad de un usuario. Por lo tanto, a menos que tenga una buena razón y una infraestructura muy pero muy segura para recoger, almacenar y transmitir información personal del usuario, se debe evitar pedir directamente en sus aplicaciones.

Un mejor enfoque para la autenticación del usuario y la información de perfil de usuario es a través de la Plataforma de Identidad Google. Identidad de la Plataforma Google permite a los usuarios registrarse de forma rápida en su aplicación a través de su cuenta de Google. Después de una señal de éxito en medio de la plataforma, siempre que sea necesario, su aplicación puede fácilmente buscar varios detalles sobre el usuario, como el nombre del usuario, dirección de correo electrónico, foto de perfil, contactos, y mucho más. Como alternativa, puede utilizar los servicios gratuitos como Firebase que puede administrar la autenticación de usuario para usted.

Si tiene que manejar las credenciales de usuario a sí mismo, se recomienda que almacene y transmitirlas en forma de hash seguras. La forma más sencilla de generar diferentes tipos de hash utilizando el SDK de Android es mediante el uso de la clase MessageDigest.


He aquí un pequeño fragmento de código que muestra cómo crear un hash de la cadena Hello World mediante la función hash SHA-256:

// Initialize MessageDigest to use SHA-256
MessageDigest md = MessageDigest.getInstance("SHA-256");

// Convert the string to a hash
byte[] sha256Hash = md.digest("Hello World".getBytes());


6. Validar entrada de usuario
En Android, la entrada del usuario no válido no suele dar lugar a problemas de seguridad como desbordamientos de búfer. Sin embargo, si se permite a los usuarios interactuar con una base de datos SQLite o un proveedor de contenidos que utiliza internamente una base de datos SQLite, debe rigurosamente desinfectar la entrada del usuario o hacer uso de consultas con parámetros. De no hacerlo, hace que sus datos sean vulnerables a los ataques de inyección SQL.

En una nota similar, la validación de entrada del usuario y la desinfección también es muy importante si usted está utilizando la entrada del usuario para generar dinámicamente el código para funcionar en un motor de scripting embebido, como Mozilla Rhino.


7.Antes Publicar utilizar ProGuard 
Las medidas de seguridad integradas en una aplicación para Android se pueden comprometer seriamente si los atacantes son capaces de poner sus manos en el código fuente. Antes de publicar su aplicación, se recomienda hacer uso de una herramienta llamada ProGuard, que se incluye en el SDK de Android, para ofuscar y compactar el código fuente.


Android Studio incluye automáticamente ProGuard en el proceso de construcción si el buildtype está listo para lanzar. La configuración por defecto ProGuard disponibles en el archivo Proguard-android.txt del SDK de Android es suficiente para la mayoría de aplicaciones. Si desea agregar reglas personalizadas para la configuración, puede hacerlo dentro de un archivo llamado proguard-rules.pro, que es una parte de cada proyecto Android Studio.

--------------------------------------------------------------------------------------------------------------------
Espero que ahora tengan una mejor comprensión de cómo hacer que sus aplicaciones de Android sean mas seguras. La mayor parte de las mejores prácticas que he mencionado en este artículo sólo son aplicables si está utilizando el SDK de Android para desarrollar sus aplicaciones. Si está utilizando el NDK de Android en su lugar, usted tiene que ser mucho más cuidadoso, ya que la programación en el lenguaje C, se espera gestionar los detalles de la aplicación en  bajo nivel, tales como punteros y asignación de memoria a sí mismo.

Para obtener más información sobre la seguridad en Android, se puede hacer referencia a los documentos de seguridad AOSP.

jueves, 23 de junio de 2016

Como enviar mensaje de texto en android studio

Buenas, como están hoy veremos un nuevo tutorial, algo básico pero muy bien hecho, en donde veremos como enviar mensajes de texto al celular hecho en andoid studio , Bien primero aclaro de que si bien es cierto este pequeño ejercicio podras enviar mensajes de texto a cualquier celular, no es gratis siempre consumirá el saldo de tu celular. aclarado esto empezamos:

Para este ejercicio en la parte gráfica solo necesitaremos, un botón, que nos permitirá enviar el mensaje cada ves que lo presionemos y se vera mas o menos así:
A este Button le pondremos de id btnEnviar y como texto ENVIAR

 






Ahora es momento de meterle mano al código empezaremos con nuestro acostumbrado MainActivity.java donde tendremos un pequeño método que nos permitirá el envió del mensaje:


MainActivity.java
public class MainActivity extends AppCompatActivity {
         Button Enviar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Enviar = (Button)findViewById(R.id.btnEnviar);

        Enviar.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                EnviarMensaje("Aqui el numero del cel","Hola Soy Android Facil te estoy enviando un Mensaje");


            }
        });
    }
    private void EnviarMensaje (String Numero, String Mensaje){
        try {
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(Numero,null,Mensaje,null,null);
        Toast.makeText(getApplicationContext(), "Mensaje Enviado.", Toast.LENGTH_LONG).show();
        }

        catch (Exception e) {
            Toast.makeText(getApplicationContext(), "Mensaje no enviado, datos incorrectos.", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }

    }
}


Como se aprecia en el código hacemos la llamada en el boton Enviar al metodo EnviarMensaje dentro de un Onclik con esto nos aseguramos que cada ves que se haga un clic en el boton enviara el mensaje.

Que debes cambiar? fijate la linea de codigo dentro del MainActivity
EnviarMensaje("Aquí el numero del cel","Hola Soy Android Facil
 te estoy enviando un Mensaje");

Lo que esta en rojo debes poner el numero de celular a donde enviaras el mensaje y reemplazas el Hola Soy Androit Facil...... por el mensaje que desees, recuerda que el formato de celular debe ir completo para evitar problemas, por ejemplo mi país es Perú y mi código es +51 entonces el numero que pondré podría sera algo así +51956874521 ojo no es mi numero, por si acaso las ingenieras acosadoras jejej   bien ahora solo debemos ingresar un permiso a nuestro AndroidManifest.xml
android.permission.SEND_SMS"

Y quedaría mas o menos así.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidmorefast.moden.appenviomensaje">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>

</manifest>
Bien y con eso terminamos, el mensaje que nos llegaría al celular seria algo así.


Ahora les dejo el enlace del ejercicio para su descarga:
CLIC PARA DESCARGAR


                                            ENLACES DE INTERES:
Como mostrar mi ubicacion en google map apiv2 android studio
Como obtener la Ubicación del GPS-Android

miércoles, 22 de junio de 2016

Como obtener la Ubicación del GPS-Android

Actualizado:  23/03/2017
-Se arreglo el error Permission
-Cuando el Gps esta desactivado, te lleva automáticamente a la configuración del GPS
-Al caminar la latitud y longitud se actualiza de forma automática
--------------------------------------------------------------------------------------------------------------------
Hace unos días me vino una pregunta a la mente.
Como obtengo la dirección de mi posición en android?
Me puse a investigar en algunos sitios e hice un tutorial paso a paso, como siempre comento en mis tutos les voy a dar filete Mignon "nada de hueso" y puedan degustarlo con facilidad.

Empezamos la estructura sera la siguiente:
Primero crearemos un nuevo proyecto al que llamaremos AppGPS

1) Se nos creara un nuevo activity_main.xml
2) Se nos creara nuestro MainActivity.java
3) Nuestro AndroidManifest.xml (tendremos que agregar algunas cosas)



Importante:
Una vez creado el proyecto debemos de agregar a nuestra aplicación permisos para usar el GPS dispositivo y para ello nos vamos al fichero AndroidManifest.xml y agregamos el siguiente permiso

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


Bien nuestro activity_main.xml tendrá lo siguiente 2 Texview y un imageView. Todo dentro de un LinearLayout

También les dejo el activity_main.xml

<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:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.androidmorefast.pc.appobtenergps.MainActivity">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/mensaje_id"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="TextView" />

            <TextView
                android:id="@+id/mensaje_id2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="TextView" />

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="0dp"
                android:layout_gravity="center"
                android:layout_weight="1"
                android:src="@drawable/logo" />
        </LinearLayout>

    </RelativeLayout>

Ahora que hemos configurado la parte gráfica del ejercicio necesitamos, configurara nuestro MainAtivity.java. Vamos a definir un LocationListener.
 Un LocationListener, no es mas que una clase que se encarga de estar siempre atenta a cualquier cambio de localidad recibido en el GPS del dispositivo.

Digamos que es como un radar que detecta toda señal de cambio de ubicación que el GPS emite. Para efectos de este tutorial, este LocationListener lo definiremos dentro de nuestra clase MainActivity. Lo primero que debemos hacer es importar el paquete “android.location.LocationListener”, ya que este paquete es el que tiene la definición de la interfaz LocationListener. Luego definimos la clase Localizacion, de la siguiente manera (ver comentarios al inicio de cada método que les dejare en proyecto para descarguen)::

MainActivity.java
01
public class MainActivity extends AppCompatActivity {
    TextView mensaje1;
    TextView mensaje2;


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

        mensaje1 = (TextView) findViewById(R.id.mensaje_id);
        mensaje2 = (TextView) findViewById(R.id.mensaje_id2);


        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000);
        } else {
            locationStart();
        }
    }

    private void locationStart() {
        LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Localizacion Local = new Localizacion();
        Local.setMainActivity(this);
        final boolean gpsEnabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        if (!gpsEnabled) {
            Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(settingsIntent);
        }
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000);
            return;
        }
        mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, (LocationListener) Local);
        mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, (LocationListener) Local);

        mensaje1.setText("Localizacion agregada");
        mensaje2.setText("");
    }

    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == 1000) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                locationStart();
                return;
            }
        }
    }

    public void setLocation(Location loc) {
        //Obtener la direccion de la calle a partir de la latitud y la longitud
        if (loc.getLatitude() != 0.0 && loc.getLongitude() != 0.0) {
            try {
                Geocoder geocoder = new Geocoder(this, Locale.getDefault());
                List<Address> list = geocoder.getFromLocation(
                        loc.getLatitude(), loc.getLongitude(), 1);
                if (!list.isEmpty()) {
                    Address DirCalle = list.get(0);
                    mensaje2.setText("Mi direccion es: \n"
                            + DirCalle.getAddressLine(0));
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /* Aqui empieza la Clase Localizacion */
    public class Localizacion implements LocationListener {
        MainActivity mainActivity;

        public MainActivity getMainActivity() {
            return mainActivity;
        }

        public void setMainActivity(MainActivity mainActivity) {
            this.mainActivity = mainActivity;
        }

        @Override
        public void onLocationChanged(Location loc) {
            // Este metodo se ejecuta cada vez que el GPS recibe nuevas coordenadas
            // debido a la deteccion de un cambio de ubicacion

            loc.getLatitude();
            loc.getLongitude();

            String Text = "Mi ubicacion actual es: " + "\n Lat = "
                    + loc.getLatitude() + "\n Long = " + loc.getLongitude();
            mensaje1.setText(Text);
            this.mainActivity.setLocation(loc);
        }

        @Override
        public void onProviderDisabled(String provider) {
            // Este metodo se ejecuta cuando el GPS es desactivado
            mensaje1.setText("GPS Desactivado");
        }

        @Override
        public void onProviderEnabled(String provider) {
            // Este metodo se ejecuta cuando el GPS es activado
            mensaje1.setText("GPS Activado");
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            switch (status) {
                case LocationProvider.AVAILABLE:
                    Log.d("debug", "LocationProvider.AVAILABLE");
                    break;
                case LocationProvider.OUT_OF_SERVICE:
                    Log.d("debug", "LocationProvider.OUT_OF_SERVICE");
                    break;
                case LocationProvider.TEMPORARILY_UNAVAILABLE:
                    Log.d("debug", "LocationProvider.TEMPORARILY_UNAVAILABLE");
                    break;
            }
        }
    }
}

Ahora que tenemos creada nuestra clase Localizacion debemos de implementarla y para ello debemos llamar al servicio LocationManager del sistema Android y agregar un nuevo LocationListener de actualizaciones de ubicación, que en este caso sería una instancia de nuestra clase Localizacion.

Para este ejemplo vamos hacer esto en el método onCreate de nuestra clase MainActivity. Recordemos que el método onCreate se ejecuta durante la creación de la actividad y permite inicializar nuestros componentes tanto de UI como de Lógica de negocio.

Bueno ha llegado la hora de ejecutar el apk del millon de dolares xD
Para este ejercicio utilizare el emulador Genymotion en otro post ya le explique el porque.
Quedaría algo así cuando el gps este desactivado.
Actualización: Ahora nos lleva de frente a la configuración del Gps si esta desactivado.




Para los que usan el emulador Genymotion  hacemos clic en donde dice GPS y lo activamos.....



Luego hacemos clic en MAP, les explico como es un emulador de android las coordenadas hay que indicarle manualmente, es por eso que uso genymotion con un par de clics y se agrega, no es como otros emuladores que hay que enviarle las coordenadas por consola etc, etc....



Despues de elegir el lugar que queremos, cerramos y volvemos al programa y nos mostrara esto.

IMPORTANTE:  Te invito a mirar el vídeo actualizado donde se explica algunas cosas que no explican acá para no alargar el tutorial


Espero les haya gustado, a continuación les dejo el proyecto para que lo prueben.


Nota: para que funcione correctamente el gps en genymotion debes pasar por aca primero instalar paso a paso google play servicios en Genymotion.
 ENLACES DE TEMAS PARECIDOS:
Como mostrar mi ubicacion en google map apiv2 android studio
Como extraer la direccion de google map en un texview en android

Como enviar por mensaje de texto mi ubicación y coordenadas del gps

domingo, 19 de junio de 2016

Como extraer la direccion de google map en un texview en android

Buenas, hoy veremos un tutorial avanzado de como obtener la dirección de google map y guardarlo en un textview.
Este ejercicio me lo pidieron desde Mexico, yo justamente estaba haciendo algo parecido para un proyecto, así que voy a utilizar parte del código que estoy trabajando para darle una mano a todos los interesado.
En la parte gráfica necesitaremos
Activity 1 (activity_main.xml)
- 1 button
- 1 textview

Activity 2 (activity_seleccionar_direccion.xml)
- 1 fragment

como lo muestro en la siguiente imagen.

                              


Bien ahora empezaremos la parte del código:

MainActivity.java
public class MainActivity extends Activity implements View.OnClickListener{
    Button btnDireccion;
    TextView lblDireccion;
    public static double lat = 0;
    public static double lon = 0;
    public static boolean checked = false; //Se ha chequeado el mapa.
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      //  getActionBar().setDisplayHomeAsUpEnabled(true);
        setContentView(R.layout.activity_main);

        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }

        btnDireccion = (Button) findViewById(R.id.btnDireccion);
        lblDireccion = (TextView) findViewById(R.id.lblDireccion);
        
    }

    public void onWindowFocusChanged(boolean hasFocus){
        if (hasFocus){
            if (checked){
                checked = false;
                this.lblDireccion.setText(F.getDireccionLL(lat, lon));
            }
        }
    }

    public void onClick(View v) {
        Intent pantalla = new Intent(this, SeleccionarDireccion.class);
        this.startActivity(pantalla);
    }

}


SeleccionarDireccion.java
si te fijas hay unas coordenadas, esas son para cuando cargue el mapa, te indique donde empezar, las que yo puse iniciaran en mi ciudad dentro de una universidad, puedes cambiarlo por las coordenadas de tu ciudad. Aquí te dejo un ejercicio que saca tus coordenadas donde te encuentres, por si lo necesitas.
public class SeleccionarDireccion extends AppCompatActivity {
    private LatLng latlong = new LatLng (-6.760644,-79.863413);
    private GoogleMap map;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seleccionar_direccion);
        MapFragment fMap = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
       // fMap.getMapAsync((OnMapReadyCallback) this);
        map = fMap.getMap();

        map.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
            public void onMapLongClick(LatLng LL)  {
                MainActivity.lat = LL.latitude;
                MainActivity.lon = LL.longitude;
                regresar();

            }

        });
        MainActivity.checked = true;
        if (map!=null){
            iniciarGPS();

        }

    }
    private void iniciarGPS(){
        map.addMarker(new MarkerOptions().position(latlong)
                .title("Ubicación actual"));
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(latlong,15));
    }
    public void regresar() {
        Intent intent = new Intent(this, MainActivity.class);
        intent .setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivity(intent);
        this.finish();

    }

}


NOTA: Las siguientes clases son de validaciones y de envíos por http, pues como les comente e cogido una parte de mi proyecto para hacerles este tuto, dependerá de ustedes si lo limpian un poco o no, yo lo dejo así, porque en unos días lo reutilizare para hacer la continuación y hacer que el programa también pueda guardar las direcciones en una base de datos."me da flojera limpiar código estoy cansado y es domingo "


F.java
public class F {
    public static String getDireccionLL(double latitud, double longitud){
      String googleapi = "http://maps.googleapis.com/maps/api/geocode/json?latlng="+
                String.valueOf(latitud)+"%2C"+
                String.valueOf(longitud);

        String resultado = null;
        try {
            resultado = new Http().enviarGet(googleapi);
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            JSONObject json = new JSONObject(resultado);
            JSONArray jsonArray = json.getJSONArray("results");

            JSONObject jsonData = jsonArray.getJSONObject(0);

            return jsonData.getString("formatted_address");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "Lat / Long inválidas";
    }

}

Http.java
public class Http {

 public String enviarGet(String url) throws Exception {
  HttpClient client = new DefaultHttpClient();
  HttpGet request = new HttpGet(url);

  HttpResponse response = client.execute(request);
  BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

  StringBuffer result = new StringBuffer();
  String line = "";
  while ((line = rd.readLine()) != null) {
   result.append(line+"\n");
  }

  return result.toString();
 }

}


Bien Ahora debemos editar nuestro AndroidManifest.xml debemos poner los permisos para que se nos muestre el mapa de google y también nuestra key para los permisos, yo lo dejare sin key y tendrás que crear tu propia key, sino sabes de que hablo échale un vistazo a estos links:
como crear keys sha1 api para android studio

Como obtener una clave API v2 para google map

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

    <permission
        android:name="com.androidmorefast.moden.appcapturardireccion.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>
    <uses-permission android:name="com.androidmorefast.moden.appcapturardireccion.permission.MAPS_RECEIVE"/>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.READ_LOGS"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

    <application

        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity android:name=".SeleccionarDireccion"></activity>
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AQUI VA TU CLAVE API V2" />
    </application>

</manifest>

Bien el resultado seria como las siguientes imágenes:
Cada ves que hagas click 2 segundos sobre alguna dirección del mapa automáticamente te llamara la dirección.



Bien ahora te dejo para que descargues el paquete del proyecto.


CLIC PARA DESCARGAR


                                            ENLACES DE TEMAS PARECIDOS:
Como mostrar mi ubicacion en google map apiv2 android studio

Como obtener la Ubicación del GPS-Android

 

Copyright @ 2015 Android-facil.

Designed by Draganus | AndroidFacil