2016-06-27 2 views
0

Я создаю приложение. Я не получаю текущее местоположение, когда устанавливаю приложение, а затем открываю его и разрешаю разрешение на доступ к местоположению, но показывая только карту. После повторного открытия приложения отображается текущее местоположение. используя следующие code-Как получить доступ к местоположению при запуске приложения в первый раз в зефире

 public class MainActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { 

    LocationRequest mLocationRequest; 
    GoogleApiClient mGoogleApiClient; 

    LatLng latLng; 
    GoogleMap mMap; 
    SupportMapFragment mFragment; 
    Marker CurrentMarker; 

    private static final int PERMISSION_REQUEST_CODE = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 




     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     mFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
     mFragment.getMapAsync(this); 

     // Button request_permission = (Button)findViewById(R.id.request_permission); 

     //request_permission.setOnClickListener(this); 

     if (!checkPermission()) { 

      requestPermission(); 

     } else { 

      Toast.makeText(this,"Permission already granted.",Toast.LENGTH_SHORT).show(); 

     } 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 


    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     //final int LOCATION_PERMISSION_REQUEST_CODE = 100; 
     // ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION}, 
       // LOCATION_PERMISSION_REQUEST_CODE); 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

      return; 
     } 
     mMap.setMyLocationEnabled(true); 
     buildGoogleApiClient(); 
     mGoogleApiClient.connect(); 

    } 

    private void buildGoogleApiClient() { 

     // TODO Auto-generated method stub 
     Toast.makeText(this, "buildGoogleApiClient", Toast.LENGTH_SHORT).show(); 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
    } 

    @Override 
    public void onConnected(Bundle bundle) { 


     Toast.makeText(this, "Onconnection", Toast.LENGTH_SHORT).show(); 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

      return; 
     } 
     Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
     if(mLastLocation != null){ 
      latLng = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude()); 
      MarkerOptions markerOptions = new MarkerOptions(); 
      markerOptions.position(latLng); 
      markerOptions.title("Current Location"); 
      markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); 
      CurrentMarker = mMap.addMarker(markerOptions); 
     } 
     mLocationRequest = new LocationRequest(); 
     //mLocationRequest.setInterval(5000); 
     // mLocationRequest.setFastestInterval(3000); 
     mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); 
     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 

    } 

    @Override 
    public void onConnectionSuspended(int i) { 
     Toast.makeText(this,"onConnectionSuspended",Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Toast.makeText(this,"onConnectionFailed",Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onLocationChanged(Location location) { 

     if (CurrentMarker != null){ 
      CurrentMarker.remove(); 
     } 
     latLng = new LatLng(location.getLatitude(), location.getLongitude()); 
     MarkerOptions markerOptions = new MarkerOptions(); 
     markerOptions.position(latLng); 
     markerOptions.title("Current Position"); 
     markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); 
     CurrentMarker = mMap.addMarker(markerOptions); 
     Toast.makeText(this,"Location changed",Toast.LENGTH_SHORT).show(); 

     CameraPosition cameraPosition = new CameraPosition.Builder().target(latLng).zoom(14).build(); 

     mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

    } 


    private boolean checkPermission(){ 
     int result = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION); 
     if (result == PackageManager.PERMISSION_GRANTED){ 

      return true; 

     } else { 

      return false; 

     } 
    } 

    private void requestPermission(){ 

     if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.ACCESS_FINE_LOCATION)){ 

      Toast.makeText(this,"GPS permission allows us to access location data. Please allow in App Settings for additional functionality.",Toast.LENGTH_LONG).show(); 

     } else { 

      ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},PERMISSION_REQUEST_CODE); 
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case PERMISSION_REQUEST_CODE: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 



       } else { 



       } 
       break; 
     } 
    } 
} 

Пожалуйста, скажите мне, как получить местоположение, когда я установил, а затем открыть его первый time.Using мой исходный код.

Благодаря

+0

теперь, пожалуйста, скажите мне, как решить это – Rishabh

ответ

0

В зефира вы не можете получить местоположение до доступа местонахождения разрешения пользователя к приложению во время выполнения. Как разрешения местонахождения разрешения пользователя перезагрузить активность

Intent intent= new Intent(MainActivity.this,MainActivity.class); 
    startActivity(intent); 
    finish(); 
+0

нормально ... когда я установить приложение затем открыть и пользователю разрешение разрешено, но не показывая местоположение. Откроется окно приложения. – Rishabh

+0

проверить ans обновлено. –

+0

где я должен поставить этот код i мой исходный код – Rishabh

0

Почему не показывают первый раз: Потому что вы не обращались после предоставления.

Почему вы показали это во второй раз: поскольку вы ранее предоставили разрешение.

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case PERMISSION_REQUEST_CODE: 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

      // TRY GETTING THE LOCATION HERE ON FIRST TIME (AFTER GRANTING) 
      Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
      } else {} 
      break; 
    } 
} 
+0

, пожалуйста, скажите мне, как с этим справиться. – Rishabh

+0

После предоставления диалога с разрешением YES вызывается метод onRequestPermissionsResult. Это означает, что вы можете вызвать getLastLocation или сделать обновления запроса местоположения. Посмотрите место комментария в моем ответе. – Blackkara

+0

Я не получаю ... скажите, используя мой исходный код – Rishabh

Смежные вопросы