Я разрабатываю мобильное приложение в Android Studio Нацеленный на пожилой Peolple, и я хочу реализовать кнопку, которая, ранее выбрав аварийный контакт, отправляет сообщение SOS с местоположением в режиме реального времени. Мне удалось нажать кнопку, а затем, если я выберу приложение по умолчанию (SMS), тело текста предварительно написано, и все, что мне нужно сделать, это нажать Отправить (место тоже в порядке), но Мне нужно, чтобы он был автоматическим, я имею в виду, что мне не нужно нажимать кнопку «Отправить», чтобы отправить. >
Код: Выделить всё
package com.example.appassistant;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.ParcelFormatException;
import android.telephony.SmsManager;
import android.util.Log;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;
import android.Manifest;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
public class MainActivity extends AppCompatActivity {
private FusedLocationProviderClient fusedLocationClient;
private static final int PERMISSION_REQUEST_CODE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
Button btnSOS = findViewById(R.id.btnSOS);
btnSOS.setOnClickListener(view -> {
sendSOS();
});
}
private void sendEmergencyMessage(double lat, double lon) {
String emergencyContact = "+34" + getEmergencyContact();
if (emergencyContact == null || emergencyContact.isEmpty()) {
Toast.makeText(this, "No hay contacto de emergencia configurado", Toast.LENGTH_SHORT).show();
return;
}
String message = "¡Emergencia! Necesito ayuda. Mi ubicación: https://maps.google.com/?q=" + lat + "," + lon;
Log.d("SOS", "Enviando SMS a " + emergencyContact + ": " + message);
Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.setData(Uri.parse("sms:" + emergencyContact));
smsIntent.putExtra("sms_body", message);
startActivity(smsIntent);
}
private void sendSOS() {
// Verificar permisos correctamente
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.SEND_SMS}, PERMISSION_REQUEST_CODE);
return;
}
fusedLocationClient.getLastLocation()
.addOnSuccessListener(this, location -> {
if (location != null) {
String emergencyContact = "+34" + getEmergencyContact() ;
Log.d("SOS", "Número de emergencia: " + emergencyContact);
sendEmergencyMessage(location.getLatitude(), location.getLongitude());
} else {
Toast.makeText(this, "No se pudo obtener la ubicación", Toast.LENGTH_SHORT).show();
}
});
}
private String getEmergencyContact() {
String contact = getSharedPreferences("EmergencyContact", MODE_PRIVATE)
.getString("emergency_phone", null);
Log.d("SOS", "getEmergencyContact() devuelve: " + contact);
return contact;
}
// Manejar la respuesta de la solicitud de permisos
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
sendSOS();
} else {
Toast.makeText(this, "Se requieren permisos para enviar el mensaje de emergencia", Toast.LENGTH_SHORT).show();
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... oid-studio