Как получить текущее местоположение GPS в AsyncTask фоне темы в Android? - PullRequest
0 голосов
/ 05 июля 2018

На самом деле я хочу получить текущее местоположение GPS не в активности, а через фоновый поток AsyncTask согласно требованию и хочу вернуть местоположение GPS обратно в активность в Android. Пожалуйста, подскажите, как мне это сделать?

Это код, благодаря которому текущее местоположение GPS идеально подходит для работы, но то же самое я хочу сделать в AsyncTask:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.detaildiscount);
  locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);


        listener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                SetGpsLocation(location);
                Log.d(TAG, "onLocationChanged: ");
                // textView.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();
            Log.d(TAG, "onRequestPermissionsResult: ");
            break;
        default:
            break;
    }
}

void configure_button() {
    // first check for permissions
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=
            PackageManager.PERMISSION_GRANTED && 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);
            Log.d(TAG, "configure_button: ");
        }
        Log.d(TAG, "configure_button: ");
        return;
    }
    RequestGpsLocation();
    // this code won'textView execute IF permissions are not allowed, because in the line above there is return statement
}

public void RequestGpsLocation() {
    //noinspection MissingPermission
    if (ActivityCompat.checkSelfPermission(DetailOfListCard.this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED &&
            ActivityCompat.checkSelfPermission(DetailOfListCard.this, Manifest.permission.ACCESS_COARSE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED) {
        Log.d(TAG, "RequestGpsLocation: ");
        return;
    }
    Log.d(TAG, "RequestGpsLocation: ");
    locationManager.requestLocationUpdates("gps", 5000, 0, listener);
}

Заранее спасибо

1 Ответ

0 голосов
/ 05 июля 2018

запустить AsyncTask в этом обработчике изменения местоположения и в onLocationChanged () .... Поместите следующий код в удовольствие, которое вызывает AsyncTask

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        LocationManager locationManager;
        LocationListener locationListener;

        startAsync = false;   //to start the AsyncTask once.
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                Log.v("GPS",location.getLatitude()+"_"+location.getLongitude());
                lat = location.getLatitude();
                longi = location.getLongitude();
                if (startAsync == false) {
                    new Checkout_Async(Checkout.this, listener).execute(new Checkout_Package(user, product_all, getTotalCost(product_all), fee, getTotalCost(product_all) + fee, lat, longi));
                    startAsync = true;
                    pd.dismiss();
                }
            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {

            }

            @Override
            public void onProviderEnabled(String provider) {

            }

            @Override
            public void onProviderDisabled(String provider) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent);

            }
        };
        pd=ProgressDialog.show(Checkout.this,"",getResources().getString(R.string.please_wait),false);
        locationManager.requestLocationUpdates("gps",50,0,locationListener);

  }
   });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...