LocationServices.FusedLocationApi.getLastLocation не работает с сотовой сетью на Samsung

Я протестировал этот код, который работает на 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 недоступен, на устройствах Samsung происходит сбой. Я просто хотел знать, принято ли разрешение на ACCESS_COARSE_LOCATION от пользователя или нет.


person Savita    schedule 20.05.2016    source источник


Ответы (1)


Вы можете использовать что-то подобное для получения приблизительного местоположения от 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

Конечно, вам нужно настроить все необходимые разрешения и т. Д.

person comrade    schedule 20.05.2016
comment
На устройстве Самсунг не заработало! Это то, что устройства Samsung не работают с LocationListener? - person Savita; 21.05.2016