Попытка отправить мое текущее местоположение через смс, когда таймер обратного отсчета заканчивается - PullRequest
0 голосов
/ 15 апреля 2020

В настоящее время я пытаюсь отправить свое текущее местоположение на номер, когда таймер обратного отсчета, который реализован, завершается. Я смог успешно отправлять сообщения на другой номер, только когда я пытаюсь отправить местоположение, в котором происходит сбой моего приложения. Вот моя активность, в которой сообщение должно быть отправлено

public class alert extends AppCompatActivity{
    public int counter;
    Button stopTimer;
    TextView counttime;
    CountDownTimer countDownTimer;
    MediaPlayer player;
    Home home;
    public static String uri;
    private FusedLocationProviderClient fusedLocationClient;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alert);
        stopTimer = (Button) findViewById(R.id.stop);
        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
        fusedLocationClient.getLastLocation()
                .addOnSuccessListener(this, new OnSuccessListener<Location>() {
                    @Override
                    public void onSuccess(Location location) {
                        // Got last known location. In some rare situations this can be null.
                        if (location != null) {
                            uri = "http://maps.google.com/maps?saddr=" + location.getLatitude()+","+location.getLongitude();
                        }
                    }
                });
        player = MediaPlayer.create(this, R.raw.alram);
        home = new Home();
        counttime=findViewById(R.id.text1);
        //countDownTimer.start();
         countDownTimer = new CountDownTimer(10000,1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                counttime.setText("seconds remaining: " + millisUntilFinished / 1000);
                player.start();
            }
            @Override
            public void onFinish() {

                Toast.makeText(alert.this," Message sent", Toast.LENGTH_SHORT).show();
                player.stop();
                FragmentManager fm = getSupportFragmentManager();
                Home home = new Home();
                fm.beginTransaction().replace(R.id.alert, home).commit();

                String phonenumber = home.number;
                SmsManager smsManager = SmsManager.getDefault();
                StringBuffer smsBody = new StringBuffer();
                smsBody.append(Uri.parse(uri));
                smsManager.sendTextMessage(phonenumber, null, smsBody.toString(), null, null);

            }
        }.start();
        stopTimer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                countDownTimer.cancel();
                player.stop();
                FragmentManager fm = getSupportFragmentManager();
                Home home = new Home();
                fm.beginTransaction().replace(R.id.alert, home).commit();
                Toast.makeText(alert.this,"Cancelled", Toast.LENGTH_SHORT).show();
            }
        });

    }
}

Это также разрешения, которые я добавил к своему манифесту

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.INTERNET" />

Это моя полная трассировка стека:

2020-04-15 15:17:38.707 19740-19740/com.example.carcrashdetection E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.carcrashdetection, PID: 19740
    java.lang.NullPointerException: uriString
        at android.net.Uri$StringUri.<init>(Uri.java:496)
        at android.net.Uri$StringUri.<init>(Uri.java:486)
        at android.net.Uri.parse(Uri.java:458)
        at com.example.carcrashdetection.alert$2.onFinish(alert.java:76)
        at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:127)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7682)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

Номер, который я получаю из другого класса, но он работает, если я не отправляю местоположение, поэтому я знаю, что это не проблема. Я думаю, что URI может быть нулевым, но я не знаю, почему это будет. Если бы кто-нибудь мог указать мне правильное направление, это было бы очень ценно.

...