【问题标题】:LocationServices.FusedLocationApi.getLastLocation does not work with cellular network on SamsungLocationServices.FusedLocationApi.getLastLocation 不适用于三星的蜂窝网络
【发布时间】:2016-05-20 14:11:52
【问题描述】:

我已经测试了这段代码,它可以在 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 的权限。

【问题讨论】:

    标签: android android-location location-services


    【解决方案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
    

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

    【讨论】:

    • 它在三星设备上不起作用!是三星设备不支持 LocationListener 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2014-09-21
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多