Как мне сделать так, чтобы мой класс местоположения отправлял координаты через SMS? - PullRequest
0 голосов
/ 30 марта 2019

У меня проблемы с отправкой координат моего местоположения с помощью SMS. Я не могу правильно оформить отправку СМС. Вот мой главный код:

private static final int REQUEST_CODE = 1000;

FusedLocationProviderClient fusedLocationProviderClient;
LocationRequest locationRequest;
LocationCallback locationCallback;

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode)
    {
        case REQUEST_CODE:
        {
            if(grantResults.length > 0)
            {
                if(grantResults[0] == PackageManager.PERMISSION_GRANTED)
                {

                }
                else if(grantResults[0] == PackageManager.PERMISSION_DENIED)
                {

                }
            }
        }
    }
}

Здесь в моем onCreate знак двойного && читает неожиданную ошибку токена. Я также думаю, что мне нужно добавить приватную пустоту, но я не знаю, какой тип соответствует отправке SMS.

if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION))
    {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE);
    }
    else
    {

        buildLocationRequest();
        buildLocationCallback();
        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);

        {
        if (ActivityCompat.checkSelfPermission(FullscreenActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
            && ActivityCompat.checkSelfPermission(FullscreenActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION);
            ActivityCompat.requestPermissions(FullscreenActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE);
        return;
    }
    fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.myLooper());

    }

    FusedLocationProviderClient provider = fusedLocationProviderClient;


    Location currentLocation = new Location(String.valueOf(provider));
    location("MY_PHONE_NUMBER", currentLocation);

После того, как в разделе onCreate у меня больше всего проблем, особенно с методом location в строке Location currentLocation, которая говорит, что параметр никогда не используется, и я также получаю ошибку при закрытии getLongitude. Он содержит ошибку с точкой с запятой и ничего, что я добавляю, не работает, например, а). Я не знаю, правильно ли я делаю это местоположение / класс SMS.

private void location(String phoneNumber, Location currentLocation) {
    SmsManager smsManager = SmsManager.getDefault();
    String smsBody = "maps.google.com?q=";
    smsManager.sendTextMessage(phoneNumber, null, smsBody, null, null);
}

private void buildLocationCallback() {
    locationCallback = new LocationCallback()
    {

        @Override
        public void onLocationResult(LocationResult locationResult) {
            for(Location location:locationResult.getLocations())
                SmsManager.getDefault(String.valueOf(location.getLatitude())
                        +","
                        +String.valueOf(location.getLongitude());
        }
    };
}

private void buildLocationRequest() {
    locationRequest = new LocationRequest();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(100);
    locationRequest.setFastestInterval(50);
    locationRequest.setSmallestDisplacement(10);
}

1 Ответ

0 голосов
/ 30 марта 2019

Добавить метод getLastLocation () после buildLocationCallback

private void getLastLocation() {
    try {
        fusedLocationProviderClient.getLastLocation()
                .addOnCompleteListener(new OnCompleteListener<Location>() {
                    @Override
                    public void onComplete(@NonNull Task<Location> task) {
                        if (task.isSuccessful() && task.getResult() != null) {
                            mLocation = task.getResult();
                            location("MY_PHONE_NUMBER", task.getResult());
                        } else {
                            Log.w(TAG, "Failed to get location.");
                        }
                    }
                });
    } catch (SecurityException unlikely) {
        Log.e(TAG, "Lost location permission." + unlikely);
    }
}

обновить метод определения местоположения

private void location(String phoneNumber, Location currentLocation) {
    try {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(phoneNumber, null, "maps.google.com?q=" + currentLocation.getLatitude() + "," + currentLocation.getLongitude(), null, null);
        Toast.makeText(getApplicationContext(), "SMS Sent!",
                Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(),
                "SMS faild, please try again later!",
                Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
}
...