定位器不适用于Android 6.0 +

编程入门 行业动态 更新时间:2024-10-25 14:23:51
本文介绍了定位器不适用于Android 6.0 +的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我在我的应用中遇到Locator问题。我有使用用户当前位置的服务,并基于它显示来自最近市场的引脚。它在Android波纹管6.0上没有问题,但在6.0上无法获取用户位置。我假设是因为它有新的权限系统。

I have a problem with Locator in my app. I have service that use User current location and based on it it show pins from closest marketplaces. It works without problems on Android bellows 6.0 but on 6.0 it can't get user locations. I assume because of new permission system in it.

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.locator_fragment, container, false); // Gets the MapView from the XML layout and creates it mapView = (MapView) v.findViewById(R.id.mapview); mapView.onCreate(savedInstanceState); // Gets to GoogleMap from the MapView and does initialization stuff map = mapView.getMap(); map.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() { @Override public void onMyLocationChange(final Location location) { Latitude= location.getLatitude(); Longitude= location.getLongitude(); float distance = location.distanceTo(location); Location locationzoom = map.getMyLocation(); LatLng mapCenter = new LatLng(location.getLatitude(), location.getLongitude()); if(!didSetLocation) { CameraPosition cameraPosition = CameraPosition.builder() .target(mapCenter) .zoom(13) .bearing(80) .build(); map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition), 2000, null); didSetLocation=true; } if ((lastcall!=null)?(location.distanceTo(lastcall)>1000):true) { map.clear(); NetworkSDK.getInstance().getCoordinates(Latitude, Longitude, new Callback<List<Coordinate>>() { @Override public void onResponse(Call<List<Coordinate>> call, Response<List<Coordinate>> response) { for (int i = 0; i < response.body().size(); i++) { map.addMarker(new MarkerOptions() .position(new LatLng(response.body().get(i).getLatitude(), response.body().get(i).getLongitude())) .title(response.body().get(i).getName())); } lastcall=location; } @Override public void onFailure(Call<List<Coordinate>> call, Throwable t) { Toast.makeText(getContext(), R.string.errorNoconnection, Toast.LENGTH_SHORT).show(); } }); } } }); Location mLastLocation; map.setMapType(GoogleMap.MAP_TYPE_NORMAL); map.getUiSettings().setMyLocationButtonEnabled(false); if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), 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 v; } map.setMyLocationEnabled(true); map.isTrafficEnabled(); // Needs to call MapsInitializer before doing any CameraUpdateFactory calls MapsInitializer.initialize(this.getActivity()); // Updates the location and zoom of the MapView return v; }

我应该如何让用户选择授予应用权限?

How should I give user choice to grant permission for app?

推荐答案

private static final int REQUEST_CAMERA_PERMISSION = 1; void checkPremission() { //select which permission you want final String permission = Manifest.permission.CAMERA; // if in fragment use getActivity() if (ContextCompat.checkSelfPermission(ActivityName.this, permission) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(ActivityName.this, permission)) { } else { ActivityCompat.requestPermissions(ActivityName.this, new String[]{permission}, REQUEST_CAMERA_PERMISSION); } } else { // you have permission go ahead } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_CAMERA_PERMISSION: final int numOfRequest = grantResults.length; final boolean isGranted = numOfRequest == 1 && PackageManager.PERMISSION_GRANTED == grantResults[numOfRequest - 1]; if (isGranted) { // you have permission go ahead }else{ // you dont have permission show toast } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }

完整文档

更多推荐

定位器不适用于Android 6.0 +

本文发布于:2023-11-27 05:08:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1636728.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:定位器   不适用于   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!