ACTUALIZACIÓN
-Debido a que muchos usuarios tienen error se actualizo:
-Permisos para obtener las coordenadas
-Permisos para enviar los mensajes
Deben aceptar el mensaje que les sale al momento de usar la aplicación o no funcionara.
Buenas hoy veremos un tutorial que me han estado pidiendo como enviar por un mensaje de texto a otro celular mis coordenadas y la dirección de la calle. Alguno le llaman a este ejercicio PanicButton, porque la idea es que si estuvieras en peligro o tengas la necesidad de enviar tu localización, se haría con un simple clic.
Bien necesitamos lo siguiente:
2 textview
-txtCoordenadas
-txtDireccion
1Button
– btnEnviar
Bien ahora vamos a la codificación, nuestro MainActivity.java tendrá lo siguiente.Pon el numero de celular a donde quieres que llegue el mensaje donde dice «Aquí tu numero de celular»;
MainActivity.java
public class MainActivity extends Activity implements LocationListener { protected LocationManager locationManager; TextView coordenadas; TextView direccion; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 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 { locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1000, this); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1000, this); } super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.btnEnviar); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { TextView co = (TextView) findViewById(R.id.txtCoordenadas); TextView di = (TextView) findViewById(R.id.txtDireccion); String messageToSend = co.getText().toString(); String messageToSend2 = di.getText().toString(); if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.SEND_SMS)) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.SEND_SMS}, 1); } else { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.SEND_SMS}, 1); } }else { String number = "Aquí tu numero de celular"; SmsManager.getDefault().sendTextMessage(number, null, messageToSend2 + "n" + messageToSend, null, null); } Toast.makeText(getApplicationContext(), "Mensaje Enviado!", Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(getApplicationContext(), "Fallo el envio!", Toast.LENGTH_LONG).show(); e.printStackTrace(); } } }); } @Override public void onLocationChanged(Location location) { coordenadas = (TextView) findViewById(R.id.txtCoordenadas); direccion = (TextView) findViewById(R.id.txtDireccion); coordenadas.setText("Mi ubicacion actual es: " + "n Lat = " + location.getLatitude() + "n Long = " + location.getLongitude()); this.setLocation(location); } public void setLocation(Location location) { //Obtener la direccion de la calle a partir de la latitud y la longitud if (location.getLatitude() != 0.0 && location.getLongitude() != 0.0) { try { Geocoder geocoder = new Geocoder(this, Locale.getDefault()); List<Address> list = geocoder.getFromLocation( location.getLatitude(), location.getLongitude(), 1); if (!list.isEmpty()) { Address DirCalle = list.get(0); direccion.setText("Mi direccion es: n" + DirCalle.getAddressLine(0)); } } catch (IOException e) { e.printStackTrace(); } } } @Override public void onProviderDisabled(String provider) { Log.d("Latitude","disable"); } @Override public void onProviderEnabled(String provider) { Log.d("Latitude","enable"); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { Log.d("Latitude","status"); } }
Hay que dar unos permisos en nuestro AndroidManifest.xml
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.androidmorefast.moden.apppanicbuttonv2"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission. ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.SEND_SMS"/> <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> </manifest>
Y este es el resultado Final: Quite mi numero de celular, por las ingenieras acosadoras jajaja
Bien ahora les dejo en enlace de descarga:
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!
Instale el apk del proyecto y el boton no me funciona…. ayuda por favor
Hola Geas, as ingresado el numero de tu celular en el MainActivity.java??
en quelenguaje programo o levanto la aplicacion, netbeans, eclipse o android estudio
Esta hecho en Android Studio
Gracias amigo, eres uno de la pocos peruanos que difunde sus conocimientos para orientar en este mundo de la programación a los demás.
Que bueno que te sirva, sácale provecho.
Este comentario ha sido eliminado por el autor.
Hola maestro, no me activa el GPS a la hora de iniciar la aplicación podrías explicar un método con este mismo ejercicio?
Este ejercicio no te activa el GPS automáticamente si eso es tu pregunta, si en caswo esa fuera tu necesidad podrias hacerlo con Intent
Al momento de correrlo virtualmente y dar clic en el boton me manda un error "Could not find a method onClick(View) in the activity"
y como se solucionaria?
gracias de antemano
Update: en el celular si corre bien, el problema es que al enviar el mensaje no sale si da error o algo, checo la mensajería y dice que hay error al enviar
Hola este ejercicio toma la dirección de dispositivos físicos que tengan gps en caso contrario no funciona como por ejemplo algunos emuladores que no traen, pero podría intentar usar el emulador genymotion que si soporta el gps.
No te dejaba enviar mensajes porque había que actualizar permisos, lo acabo de actualizar puedes volver a descargar ya no te dará problemas, solo debes aceptar los permisos a la hora que se ejecuta la aplicación, saludos.
Que buen código, una pregunta como se podría hacer para que el mensaje sea un link con mi ubicación por ejemplo https://goo.gl/maps/RaeSmrPjfFo
Gracias, un saludo desde Colombia!
excelente código mil gracias
Que bueno le sirvió , saludos.
Pingback: como enviar la direccion y coordenadas del gps a una base de datos de forma automatica en android studio | ANDROFAST
Holi bro buen codigo
¿funciona en pleno 2021?