0

私のアプリでロケータに問題があります。私はユーザーの現在の位置を使用し、それに基づいて最も近いマーケットプレイスからのピンを表示するサービスを持っています。 Androidのベローズ6.0では問題なく動作しますが、6.0ではユーザーの場所を取得できません。私はそれに新しい許可システムがあると仮定します。ロケータがAndroid 6.0 +で動作しない

@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; 
} 

アプリの許可をどのようにユーザに与えるべきですか?

+0

は、私はいくつかの変更を加えた更新の答えをしてみてください。 –

答えて

1
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); 
      } 
     } 

Full Documentation

関連する問題