2016-11-03 1 views
0

Lorsque j'entre dans un écran, je vérifie si le GPS est activé, sinon, la boîte de dialogue permettant d'activer le GPS s'affiche. Lorsque l'utilisateur clique sur Oui, onActivityResult -> GPS est activé et j'essaie d'obtenir l'emplacement, mais cela retourne toujoursLa position actuelle est comme nulle dans android

Lorsque j'entre dans l'écran avec le GPS déjà activé, l'emplacement est récupéré correctement. Cela fait quelques jours que je me bats avec ça et je n'arrive pas à trouver de ressources.

s'il vous plaît aidez-moi quoi ai-je fait de mal?

@Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
          @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.recyler_list, container, false); 
     initializeView(view); 
     registerGoogleClient() 
     return view; 

    } 

    private void registerGoogleClient() { 

    try { 
       // Create an instance of GoogleAPIClient. 
       if (mGoogleApiClient == null) { 
        mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
          .addConnectionCallbacks(this) 
          .addOnConnectionFailedListener(this) 
          .addApi(LocationServices.API) 
          .build(); 
        LocationRequest locationRequest = LocationRequest.create(); 
        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder(); 
        builder.addLocationRequest(locationRequest); 
        builder.setAlwaysShow(true); 
        locationSettingsRequest = builder.build(); 
        connectGoogleApiClient(); 
       } 

      } catch (Throwable throwable) { 
       throwable.printStackTrace(); 
      } 
     } 

    @Override 
     public void onStart() { 
      super.onStart(); 

      try { 
       connectGoogleApiClient(); 
      } catch (Throwable throwable) { 
       throwable.printStackTrace(); 
      } 
     } 

     private void connectGoogleApiClient() { 
      try { 
       if (mGoogleApiClient != null) { 
        mGoogleApiClient.connect(); 
        checkDeviceGps(); 
       } 
      } catch (Throwable throwable) { 
       throwable.printStackTrace(); 
      } 
     } 

     @Override 
     public void onStop() { 
      super.onStop(); 
      disConnectGoogleApiClient(); 
     } 

    private void disConnectGoogleApiClient() { 

      try { 
       if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) { 
        mGoogleApiClient.disconnect(); 
       } 
      } catch (Throwable throwable) { 
       throwable.printStackTrace(); 
      } 
     } 


     @Override 
     public void onConnected(Bundle connectionHint) { 

      try { 

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        System.out.println("if block"); 

        if (getActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
          && getActivity().checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
         // mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
        } 
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
       } else { 
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
       } 

       System.out.println("mLastLocation is====>" + mLastLocation); 
       if (mLastLocation != null) { 
        latitude = mLastLocation.getLatitude(); 
        longtude = mLastLocation.getLongitude(); 
        System.out.println("Latitude====>" + mLastLocation.getLatitude()); 
        System.out.println("Longitude====>" + mLastLocation.getLongitude()); 
       } 
      } catch (Throwable throwable) { 
       throwable.printStackTrace(); 
      } 
     } 


     private void checkDeviceGps() { 

      try { 

       PendingResult<LocationSettingsResult> pendingResult = 
         LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, locationSettingsRequest); 
       pendingResult.setResultCallback(this); 

      } catch (Throwable throwable) { 
       throwable.printStackTrace(); 
      } 
     } 

     @Override 
     public void onResult(@NonNull LocationSettingsResult locationSettingsResult) { 
      final Status status = locationSettingsResult.getStatus(); 
      switch (status.getStatusCode()) { 

       case LocationSettingsStatusCodes.SUCCESS: 
        break; 

       case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
        try { 
         status.startResolutionForResult(getActivity(), 100); 
        } catch (IntentSender.SendIntentException e) { 
         e.printStackTrace(); 
        } 
        break; 
      } 
     } 

     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 

      switch (requestCode) { 

       case 100: 
        getLatLong(); 
        break; 
      } 
     } 


     private void getLatLong() { 

      try { 
      if (mLastLocation != null) { 
        latitude = mLastLocation.getLatitude(); 
        longtude = mLastLocation.getLongitude(); 
        System.out.println("Latitude====>" + mLastLocation.getLatitude()); 
        System.out.println("Longitude====>" + mLastLocation.getLongitude()); 
       } 
      } catch (Throwable throwable) { 
       throwable.printStackTrace(); 
      } 
     } 

enter image description here

+0

avez-vous essayé d'attendre quelques secondes dites 20 -30 avant pour chercher des données après avoir autorisé le GPS – Ak9637

+0

comment puis-je faire cela peut-il s'il vous plaît expliquer avec le code? – AbhiRam

+0

Vous devez attendre quelques secondes pour obtenir l'emplacement. Vous pouvez utiliser le fil pour cela. –

Répondre

0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       System.out.println("if block"); 

       if (getActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
         && getActivity().checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);Log.d("TAG",mLastLocation.getLatitude()); 


       } 

      } else { 
       mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
      } 

essayer ce changement, et postent LOG do u obtenir, si u ne reçoivent pas le LOG, signifie que vous n'avez pas les autorisations requises et si u get log, mais pas l'emplacement, alors nous pouvons exclure les problèmes d'autorisation. Mais la façon dont le niveau de l'API testent-vous?