Предложить пользователю включить GPS запрашивается только один раз - PullRequest
0 голосов
/ 08 сентября 2018

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

Можете ли вы, ребята, сказать мне, что я не так сделал?

Register.java

package com.abc.test2;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.widget.Toast;

public class Register implements LocationListener {

    Context context;
    public Register(Context c)
    {
        context=c;
    }
    public Location getLocation() {
        if(ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
        {
            Toast.makeText(context, "Permission not granted", Toast.LENGTH_LONG).show();
            return null;
        }
        LocationManager lm = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
        boolean isGPSEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
        if(isGPSEnabled){
            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,6000,10,this);
            Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            return l;
        }else{
            Toast.makeText(context, "Please Enable GPS",Toast.LENGTH_LONG).show();
        }
        return null;
    }


    @Override
    public void onLocationChanged(Location location) {

    }

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

    }

    @Override
    public void onProviderEnabled(String s) {

    }

    @Override
    public void onProviderDisabled(String s) {

    }
}

MainActivity.java

package com.abc.test2;

import android.Manifest;
import android.location.Location;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    Button btnGetLoc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnGetLoc = (Button)findViewById(R.id.btnGetLoc);
        ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},123);
        btnGetLoc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Register register = new Register(getApplicationContext());
                Location l = register.getLocation();
                if(l != null){
                    double lat = l.getLatitude();
                    double lon = l.getLongitude();
                    Toast.makeText(getApplicationContext(),"LAT :"+lat+"/n"+"LON :"+lon,Toast.LENGTH_LONG).show();
                }


            }
        });
    }
}

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Я думаю, что вы смешиваете запрос разрешения с запросом на включение служб определения местоположения

Как сказал @Nabin, ожидаемое поведение при запросе разрешения - запрашивать его только один раз, если оно было предоставлено в первый раз. Если оно не было предоставлено, то в следующий раз его спросят снова.

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

Если вы хотите предложить своему пользователю включить службу определения местоположения, если они отключены, обратитесь к этому вопросу: Как предложить пользователю включить GPS_PROVIDER и / или NETWORK_PROVIDER?

0 голосов
/ 08 сентября 2018

Это ожидаемое поведение.

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

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