Android 提示用户启用GPS仅询问一次

Android 提示用户启用GPS仅询问一次,android,android-studio,Android,Android Studio,我正在提示用户启用GPS。我进行了相应的编码,构建也很成功。当我启动应用程序时,应用程序提示我启用GPS。但当我关闭该应用程序,然后再次打开时,该应用程序没有提示我启用GPS。我创建了两个独立的java文件,代码如下。应用程序只提示一次,无论您关闭或卸载然后重新安装,它总是只提示一次 你们能告诉我我做错了什么吗 Register.java package com.abc.test2; import android.Manifest; import android.content.Context

我正在提示用户启用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();
                }


            }
        });
    }
}

这是预期的行为


一旦用户授予应用权限,它将永远被允许,直到用户从应用设置中明确禁用它、清除应用数据或卸载应用。

我认为您将请求权限提示启用位置服务混为一谈。

正如@Nabin所说,请求许可时的预期行为是,如果第一次获得许可,则只请求一次。如果未获得批准,则下次将再次询问

另一方面,是否启用了位置服务。如果用户授予您访问位置的权限,则应用程序只能在启用位置服务的情况下访问该位置


如果您想在用户被禁用时提示用户启用位置服务,请参考此问题:

否我在应用程序安装期间没有请求权限,我在应用程序启动期间请求,如果获得权限,则可以,但当我关闭应用程序并禁用gps时。然后再次启动应用程序,它并没有要求我启用位置服务。这就是问题所在。我的错,我错混了。我看不出你在哪里提示用户启用GPS