【问题标题】:Get Location Permissions from User in Android Application [duplicate]在Android应用程序中从用户那里获取位置权限[重复]
【发布时间】:2017-06-05 13:31:31
【问题描述】:

我正在尝试使用典型权限框获取用户的实际位置: 像这样:

如果有人知道怎么做,请回答。

【问题讨论】:

  • google for "runtime permissions android" 第一个结果应该指向官方 android 的 sdk 文档页面,在那里你可以找到你需要的一切

标签: java android permissions location


【解决方案1】:

在运行时请求许可以使用设备当前位置,如下所示:

if (ActivityCompat.checkSelfPermission(YourActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(YourActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
      ActivityCompat.requestPermissions(YourActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
      return;
}else{
  // Write you code here if permission already given.
} 

【讨论】:

  • 好答案!谢谢你:)
  • 你的活动是什么?
  • @peppydip 代表当前活动上下文。
  • 看看return;,可能你不需要了。
  • 我需要在获得许可后重新运行代码
【解决方案2】:

你可以这样做

在清单中:

<uses-feature android:name="android.hardware.location.gps" />

在您想要此权限请求的活动中:

ActivityCompat.requestPermissions(this,new String[]
{Manifest.permission.ACCESS_FINE_LOCATION}, 1);

然后通过这个函数得到用户的答案:

public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
    case 1: {
        // If request is cancelled, the result arrays are empty.
        if (grantResults.length > 0
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

        } else {
            // permission denied, boo! Disable the
            // functionality that depends on this permission.
        }
    return;
    }
        // other 'case' lines to check for other
        // permissions this app might request
}
}

如果用户接受一次,那么您的应用程序会记住它,您将不再需要发送此 DialogBox。请注意,如果他决定,用户可以稍后禁用它。然后在请求位置之前,您必须测试是否仍然授予权限:

 public boolean checkLocationPermission()
{
String permission = "android.permission.ACCESS_FINE_LOCATION";
int res = this.checkCallingOrSelfPermission(permission);
return (res == PackageManager.PERMISSION_GRANTED);
}

【讨论】:

    【解决方案3】:

    首先,您需要编写一个类,您将在其中定义授予和检查用户位置权限的方法。

    public class CheckPermission {
    
        //  CHECK FOR LOCATION PERMISSION
        public static boolean checkPermission(Activity activity){
            int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION);
            if (result == PackageManager.PERMISSION_GRANTED){
    
                return true;
    
            } else {
    
                return false;
    
            }
        }
    
        //REQUEST FOR PERMISSSION
        public static void requestPermission(Activity activity, final int code){
    
            if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.ACCESS_FINE_LOCATION)){
    
                Toast.makeText(activity,"GPS permission allows us to access location data. Please allow in App Settings for additional functionality.",Toast.LENGTH_LONG).show();
    
            } else {
    
                ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},code);
            }
        }
    
    }
    

    现在您可以调用以上两个静态方法来检查或授予您活动中的权限。

    public class LocationActivity extends AppCompatActivity {
    
    
        private GPSTracker mytracker;
        private Location myLocation;
        private double latitude=0.0d,longitude=0.0d;
        public final static int TAG_PERMISSION_CODE=1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_splash_screen);
    
            if(!CheckPermission.checkPermission(LocationActivity.this)) {
              CheckPermission.requestPermission(SplashScreenActivity.this,TAG_PERMISSION_CODE);
    
            } 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-13
      • 2016-05-28
      • 2018-07-07
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多