uid 10613 没有任何 [android.permission.ACCESS_FINE_LOCATION、android.permission.ACCESS_COARSE_LOCATION]

问题描述 投票:0回答:1

鉴于我的源代码,我尝试在启用 gps 后获取纬度和经度,但收到错误 fusedLocationProvider failureexecutes 为什么会发生我不明白并收到此错误 uid 10613 没有任何 [android.permission.ACCESS_FINE_LOCATION,android.permission .ACCESS_COARSE_LOCATION]。

@RequiresApi(api = Build.VERSION_CODES.P)
@Override
public void onStart() {
    super.onStart();
    requestPermission();
}

@RequiresApi(api = Build.VERSION_CODES.P)
private void requestPermission() {
      if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
          getLiveLocation();
      }
      else{
      getPermission();
      }
}

private void getPermission() {

    locationRequest = com.google.android.gms.location.LocationRequest.create()
            .setPriority(com.google.android.gms.location.LocationRequest.PRIORITY_HIGH_ACCURACY)
            .setInterval(10000)
            .setFastestInterval(5000);
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addAllLocationRequests(Collections.singleton(locationRequest));
    builder.setAlwaysShow(true);
    Task<LocationSettingsResponse> result = LocationServices.getSettingsClient(requireActivity())
            .checkLocationSettings(builder.build());
    result.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
        @RequiresApi(api = Build.VERSION_CODES.P)
        @Override
        public void onComplete(@NonNull Task<LocationSettingsResponse> task) {
            try {
                LocationSettingsResponse response = task.getResult(ApiException.class);
                Toast.makeText(requireActivity(), "Gps on", Toast.LENGTH_SHORT).show();
                getLiveLocation();
            } catch (ApiException e) {
                switch (e.getStatusCode()) {
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                        try {
                            ResolvableApiException resolvableApiException = (ResolvableApiException) e;
                            resolvableApiException.startResolutionForResult(requireActivity(), REQUEST_CODE);
                        } catch (IntentSender.SendIntentException ex) {
                            break;
                        }
                    case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                        break;
                }
            }
        }
    });
}

@SuppressLint("MissingPermission")
@RequiresApi(api = Build.VERSION_CODES.P)
private void getLiveLocation() {
    fusedLocationProviderClient.getLastLocation()
            .addOnSuccessListener(requireActivity(), new OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    if (location != null) {
                        // Got last known location
                        double latitude = location.getLatitude();
                        double longitude = location.getLongitude();
                        Toast.makeText(requireContext(),
                                "Latitude: " + latitude + ", Longitude: " + longitude,
                                Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(requireContext(),
                                "Location not available", Toast.LENGTH_SHORT).show();
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                Log.e("errors",e.getLocalizedMessage());
                    Toast.makeText(requireActivity(), ""+e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
                }
            });

}

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==REQUEST_CODE){
        switch (requestCode){
            case Activity.RESULT_OK:
                Toast.makeText(requireActivity(), "gps turn on", Toast.LENGTH_SHORT).show();
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                    getLiveLocation();
                }
                break;
            case Activity.RESULT_CANCELED:
                Toast.makeText(requireActivity(), "gps is required", Toast.LENGTH_SHORT).show();
        }
    }
}
@RequiresApi(api = Build.VERSION_CODES.P)
@Override
public void onResume() {
    super.onResume();
    allocation.setOnClickListener(v -> {
        isOn=locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        if(isOn){
           getLiveLocation();
        }
        else{
            requestPermission();
        }
        Toast.makeText(requireActivity(), "work", Toast.LENGTH_SHORT).show();
    });
}

我尝试在启用 gps 后获取纬度和经度,但出现错误 fusedLocationProvider 执行失败并实施技术,但没有得到此结果 uid 10613 没有任何 [android.permission.ACCESS_FINE_LOCATION、android.permission.ACCESS_COARSE_LOCATION]。但是当我执行活动时,我成功获取了纬度和经度,但是当我正在使用获取纬度和经度的项目时,它没有正确完成并失败

java android gps locationmanager fusedlocationproviderclient
1个回答
0
投票

这是因为您需要添加位置权限才能获取当前位置。 您可以按照以下步骤进行。

只需在清单文件中添加这两行

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

© www.soinside.com 2019 - 2024. All rights reserved.