android 定位授权

一:方法一

6.0以及6.0以上 需求动态申请:

1.清单文件

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

2.java代码(写,读,定位)

private void checkLocationReadWritePermission() {
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
			if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
					ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED&&
					ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

			} else {
				//不具有获取权限,需要进行权限申请
				ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION}, GET_LOCATION_WRITE_PERMISSION_REQUEST);
			}
		} else {

		}
	}
private final int GET_LOCATION_WRITE_PERMISSION_REQUEST = 103;

返回数据:

	@Override
	public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
		super.onRequestPermissionsResult(requestCode, permissions, grantResults);
		if (requestCode == 1) {
			if(requestCode==GET_LOCATION_WRITE_PERMISSION_REQUEST){ //读写,定位
			int size = 0;
			if (grantResults.length >= 1) {
				int writeResult = grantResults[0];
				//读内存权限
				boolean writePermissionGranted = writeResult == PackageManager.PERMISSION_GRANTED;//写内存权限
				if (!writePermissionGranted) {
					size++;
				}
				//写内存权限
				int readGranted = grantResults[1];
				boolean readPermissionGranted = readGranted == PackageManager.PERMISSION_GRANTED;//读内存权限
				if (!readPermissionGranted) {
					size++;
				}
				//定位权限
				int locationResult = grantResults[2];
				boolean locationPermissionGranted = locationResult == PackageManager.PERMISSION_GRANTED; //定位权限
				if (!locationPermissionGranted) {
					size++;
				}

				if (size == 0) {

				} else {
					Toast.makeText(this, "请到设置-权限管理中开启", Toast.LENGTH_SHORT).show();
				}

			}
		}
	}

总结:

方法一在部分手机(vivo,等)不可以正确判断是否被授权定位信息,都是返回1(不管是允许还是拒绝)

方法二:(一位群友(大飞机)告之)

如果有百度地图就幸福了^.^,根据里面的onReceiveLocation来做判断

/**
	 * 定位SDK监听函数
	 */
	public class MyLocationListenner implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation location) {
			if(location == null){
				LogUitl.e("==============MyLocationListenner======null");
				return;
			}
			int locType=location.getLocType();
			if(62==locType || 63==locType || 67==locType || (161<locType && locType<168)){
				LogUitl.e("==============MyLocationListenner======查看权限"); 
				
			}else{
				LogUitl.e("==============MyLocationListenner======返回数据");
		
			}
		}

		public void onReceivePoi(BDLocation poiLocation) {
		}
	}

权限页面跳转:

Intent localTntent=new Intent();
				localTntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
				if(Build.VERSION.SDK_INT>=9){
					localTntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
					localTntent.setData(Uri.fromParts("package", getPackageName(),null));
				}else if(Build.VERSION.SDK_INT<=8){
					localTntent.setAction(Intent.ACTION_VIEW);
					localTntent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
					localTntent.putExtra("com.android.setting.ApplicationPkgName",getPackageName());
				}
				startActivity(localTntent);

定位(集合)跳转:

				Intent i=new Intent();
				i.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
				startActivity(i);





猜你喜欢

转载自blog.csdn.net/fangjingjingll/article/details/79933426
今日推荐