Как добавить класс местоположения в приложение для Android?

#java #android

#java #Android

Вопрос:

У меня есть приложение, которое отправляет ваше местоположение SMS , и мне нужно реализовать местоположение.

Я протестировал некоторый код в другом проекте, и код работал хорошо.

Я получил код из тестового проекта, создал новый class и поместил туда код, но что-то не работает.

 public class LocMng extends MainActivity {


private Button b;
private TextView t;
private TextView k;
private LocationManager locationManager;
private LocationListener listener;

final int SEND_SMS_PERMISSION_REQUEST_CODE = 1;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {




    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);



    t = (TextView) findViewById(R.id.textView);
    b = (Button) findViewById(R.id.btnpol);


    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);


    listener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            t.append("n "   location.getLongitude()   " "   location.getLatitude());
        }

        @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {

        }

        @Override
        public void onProviderEnabled(String s) {

        }

        @Override
        public void onProviderDisabled(String s) {

            Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(i);
        }
    };

    configure_button();
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode){
        case 10:
            configure_button();
            break;
        default:
            break;
    }
}

void configure_button(){
    // first check for permissions
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED amp;amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.INTERNET}
                    ,10);
        }
        return;
    }
    // this code won't execute IF permissions are not allowed, because in the line above there is return statement.
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //noinspection MissingPermission
            locationManager.requestLocationUpdates("gps", 10000, 10, listener);
        }
    });
}

}
  

Когда я нажимаю кнопку, ничего не происходит.

Вот весь файл, если это необходимо https://github.com/Tony459/SO-ASt/tree/master/For SO Что-то в коде турецкое, но это не важно

Ответ №1:

вы неправильно запрашиваете местоположение, попробуйте получить местоположение таким образом :

  private Location getLastKnownLocation() {
    LocationManager mLocationManager;
    mLocationManager = (LocationManager) getActivity().getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
    List<String> providers = mLocationManager.getProviders(true);
    Location bestLocation = null;
    for (String provider : providers) {
        if (ActivityCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED amp;amp; ActivityCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        }
        Location l = mLocationManager.getLastKnownLocation(provider);
        if (l == null) {
            continue;
        }
        if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
            // Found best last known location: %s", l);
            bestLocation = l;
        }
    }

    return bestLocation;
}
  

Ответ №2:

Ваш проверочный код, вероятно, должен выглядеть примерно так:

 if ( Build.VERSION.SDK_INT >= 23 amp;amp;
         ActivityCompat.checkSelfPermission( context, android.Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED amp;amp;
         ActivityCompat.checkSelfPermission( context, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return  ;
    }
  

Если оператор ‘If’ имеет значение false, то он не возвращается и выполняется b.setOnClickListener .