簡體   English   中英

提示用戶僅啟用一次GPS

[英]Prompt user to enable GPS is asked once only

我提示用戶啟用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_PROVIDER和/或NETWORK_PROVIDER?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM