LocationServices.FusedLocationApi.getLastLocation不适用于三星的蜂窝网络

时间:2016-05-20 14:11:52

标签: android android-location location-services

我已经测试了这个代码,该代码适用于HTC One m8但不适用于其他设备。

private Location getLocation() {
        // If Google Play Services is available
        if (servicesConnected()) {
            // Get the current location
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
            }
            return LocationServices.FusedLocationApi.getLastLocation(GoogleApiClient);

        } else{
            return null;
        }

    }

我不知道是否接受ACCESS_COARSE_LOCATION权限。这是我的权限列表代码

private void insertDummyContactWrapper() {
        List<String> permissionsNeeded = new ArrayList<String>();

        final List<String> permissionsList = new ArrayList<String>();
        if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION) && !addPermission(permissionsList,Manifest.permission.ACCESS_COARSE_LOCATION))
            permissionsNeeded.add("Location");
        if (!addPermission(permissionsList, Manifest.permission.READ_CONTACTS) && !addPermission(permissionsList,Manifest.permission.WRITE_CONTACTS))
            permissionsNeeded.add("Contacts");
        if (!addPermission(permissionsList, Manifest.permission.READ_EXTERNAL_STORAGE) && !addPermission(permissionsList,Manifest.permission.WRITE_EXTERNAL_STORAGE))
            permissionsNeeded.add("Storage");

        if (permissionsList.size() > 0) {
            if (permissionsNeeded.size() > 0) {
                // Need Rationale
                String message = "You need to grant access to " + permissionsNeeded.get(0);
                for (int i = 1; i < permissionsNeeded.size(); i++)
                    message = message + ", " + permissionsNeeded.get(i);
                showMessageOKCancel(message,
                        new DialogInterface.OnClickListener() {
                            @TargetApi(Build.VERSION_CODES.M)
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                                        REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                            }
                        });
                return;
            }
            requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                    REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
            return;
        }
    }

当GPS打开时它会获得位置但是当GPS不可用时它会在三星设备上崩溃。我只是想知道是否从用户那里接受了ACCESS_COARSE_LOCATION的许可,或者没有。

1 个答案:

答案 0 :(得分:0)

您可以使用类似的东西从NETWORK_PROVIDER获取粗略位置:

LocationManager locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);

boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

// get location from Network Provider
if (isNetworkEnabled) {
    locationManager.requestLocationUpdates(
            LocationManager.NETWORK_PROVIDER,
            MIN_TIME_BW_UPDATES,
            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

    Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}

您可以为GPS_PROVIDER做同样的事情:

boolean isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

// the same action here

当然,您需要设置所有必要的权限等。

相关问题