我正在尝试创建一个应用程序,该应用程序将获取手机的当前位置并将其显示为地图上的标记。 我正在使用具有不同类型的android版本的设备。 它在Lollipop上运行良好,并显示了我当前的位置,但在其他版本上不起作用,它仅显示地图。 它没有向我提供错误消息,所以我不确定当前发生了什么。

这是我用来获取当前位置的代码:

public void getLocation() {
    try {
        _locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        isGPSEnabled = _locationManager.isProviderEnabled(_locationManager.GPS_PROVIDER);
        isNetworkEnabled = _locationManager.isProviderEnabled(_locationManager.NETWORK_PROVIDER);

        if (_locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER))
            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return;
            }_locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

        if (_locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER))
            _locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);

        // Ask for update
        Location mobileLocation = _locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (mobileLocation != null) {
            onLocationChanged(mobileLocation);
        }
        Location netLocation = _locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        if (netLocation != null) {
            onLocationChanged(netLocation);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

@Override
public void onLocationChanged(Location userLocation) {

    if (userLocation == null) {
        Log.e(TAG, "NO Internet");
        return;
    }

    _longitude = userLocation.getLongitude();

    _latitude = userLocation.getLatitude();

    if (marker != null) {
        marker.remove();
    }

    marker = mMap.addMarker(new MarkerOptions().position(new LatLng(_latitude, _longitude)).title("I'm Here"));

    String cityName = null;
    Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
    List<Address> addresses;

    try {
        addresses = gcd.getFromLocation(userLocation.getLatitude(), userLocation.getLongitude(), 1);
        if (addresses.size() > 0)
            cityName = addresses.get(0).getLocality();
    } catch (IOException e) {
        e.printStackTrace();
    }

    String fullLocation = "Longitude : " + userLocation.getLongitude() + "\nLatitude : " + userLocation.getLatitude() + "\n\nMy Current City is: " + cityName;
    Log.e(TAG, "location : " + fullLocation);

}

谢谢!

#1楼 票数:0 已采纳

试试这个答案。 有时getLastKnownLocation()返回null。 因此,您还必须添加位置更新请求。

#2楼 票数:0

对于棉花糖及更高版本,您必须明确要求用户许可。 您可以使用此代码来实现它

private void RequestAllPermissions() {

        String[] PERMISSIONS = {Manifest.permission.CAMERA, Manifest.permission.RECEIVE_SMS, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.INTERNET, Manifest.permission.CALL_PHONE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.WRITE_CONTACTS};

        if (!hasPermissions(this, PERMISSIONS)) {
            ActivityCompat.requestPermissions(this, PERMISSIONS, REQUESTCODE_PERMISSION_ALL);
        } else

    }

public static boolean hasPermissions(Context context, String... permissions) {

        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
            for (String permission : permissions) {
                if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }
        }
        return true;

    }


@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

    switch (requestCode) {
        case REQUESTCODE_PERMISSION_ALL: {

            boolean allpermissiongranted = true;
            if (grantResults.length > 0) {
                for (int i = 0; i < permissions.length; i++) {
                    if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                        allpermissiongranted = false;
                        break;
                    }
                }
            } else
                allpermissiongranted = false;

            if (allpermissiongranted) {
                //do task

            } else {

                new SweetAlertDialog(mContext, SweetAlertDialog.WARNING_TYPE)
                        .setTitleText("Permission Not Granted")
                        .setContentText("Kindly grant all requested permission to proceed.")
                        .setConfirmText("Request")
                        .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                            @Override
                            public void onClick(SweetAlertDialog sDialog) {
                                sDialog.dismissWithAnimation();
                                RequestAllPermissions();
                            }
                        })
                        .setCancelText("Exit")
                        .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                            @Override
                            public void onClick(SweetAlertDialog sweetAlertDialog) {
                                sweetAlertDialog.dismissWithAnimation();
                                finish();
                            }
                        })
                        .show();
            }

        }

  ask by MSSC Business Apps translate from so

未解决问题?本站智能推荐:

4回复

Android 8或更高版本:检查Google Play服务

此方法继续返回0.根据开发人员文档,如果设备获得最新版本的google play,此方法应返回类似SUCCES的内容。 有谁知道如何使用它?
1回复

SAPUI5 Spinner 在更高版本的 android 中不起作用

我已经使用 SAPUI5 开发了一个应用程序。 从一页导航到另一页时,必须出现微调器。 Spinner 在 jelly bean android 版本上运行良好。 但在更高版本上失败。 谁能帮我这个?
1回复

OutputStreamWriter在android更高版本中不起作用,如何解决?

此代码在android较低版本而不是较高版本中工作。 因为OutputStreamWriter在更高版本中不起作用。如何解决。 此代码在Android模拟器2.2(正常工作)和4.4(无效)下进行了测试。
1回复

Datepicker在更高版本的android中不起作用

我正在学习android编程,并开发了一个小应用程序,其中在同一屏幕上包含2个datepicker(开始和结束日期)。 它适用于Android 2.3版,但当我在Android 4.4版中设置日期时崩溃。 以下是Java代码段。 公共类WriteExcelActivity扩展A
1回复

Webview Javascript 在 Android 7.0 及更高版本中不起作用

我正在制作一个使用 html5 执行 javascript 和 jquery webview 的狗哨应用程序。 webview 加载得很好,但 Javascript 无法在我的 7.0 及更高版本的设备中执行。 对于 lollypop 5.0 和 5.5 设备,html 调用的 javascr
1回复

为什么overridePendingTransition在Android 4.0或更高版本中不起作用?

这段代码在我的HTC Disire和Android 2.3.3设备上运行良好,但在我的android 4.0手机中无法正常工作 - 华为C8812?
1回复

Geocoder在kitkat以上版本的android中不起作用

我在android应用程序中与geocoder一起使用以获取经纬度的国家/地区名称。 我发现它在kitkat版本及以下版本中运行良好。 但是,当我在上述版本中测试我的应用程序时,它给出的是null。 因此,我的问题很简单,即如何使用kitkat以上版本的地址解析器。 如果还有其他更好的选
1回复

getLastKnownLocation在Android 7及更高版本中返回Null

我正在开发要获取位置信息的Android应用程序。 下面的代码在Android 6.0之前可以正常工作,但是在Android 7.0及更高版本中,它在getLastKnownLocation处为空。