Hy thank you for your reply, I appreciate but I have already tried that and it has the same results
On Thursday, January 26, 2017 at 5:27:41 PM UTC+5, yotam hadas wrote: > > Hey, > I am *NOT *android developer proffesional but I tried to do something > similar to what you are asking about so I think I might have an answer for > you. > My offer for you is to simply use Criteria > <https://developer.android.com/reference/android/location/Criteria.html>. > You can use it to get the BEST AVILABLE provider without checking it your > self. > > *How to use?* > > 1. create new Criteria > <https://developer.android.com/reference/android/location/Criteria.html> > object. > 2. define your criteria needs. > 3. get LocationManager > <https://developer.android.com/reference/android/location/LocationManager.html> > object. > 4. use getBestProvider > <https://developer.android.com/reference/android/location/LocationManager.html#getBestProvider(android.location.Criteria,+boolean)> > method > > On Thursday, January 26, 2017 at 9:28:58 AM UTC+2, Fhahroz Iqbal wrote: >> >> I am trying to develop an android application that gets the device >> latitude and longitude using GPS or Network providers, whichever is >> available for the process. The code works perfectly fine when the device's >> GPS is on but unfortunately it never works when the device's GPS is >> switched off. >> >> >> I want to get the device's latitude and longitude based on the available >> providers, for example; if device's GPS is on it should get the device's >> latitude and longitude using GPS provider and if the GPS is switched off it >> should get the device's latitude and longitude using the network provider. >> In my case the network provider always returns false and only works when >> the device's GPS is switched on where as it should not bother about the >> device GPS to be on or off it should simply get the latitude and longitude >> based on network provider. >> >> >> I have used the fused API from Google but even that has the same issue, I >> can only get the latitude and longitude using GPS provider and when I turn >> off the device's GPS it never returns the required latitude and longitude >> using network provider because network provider and GPS providers both >> returns false when device's GPS is switched off. >> >> >> Both GPS and network provider is working on device's GPS, I want to >> separate their process respectively. >> >> >> I am using following permissions and features >> >> <uses-permission android:name="android.permission.INTERNET" /> >> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> >> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> >> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> >> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> >> <uses-permission android:name="android.permission.LOCATION_HARDWARE" /> >> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> >> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> >> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> >> <uses-feature android:name="android.hardware.location" >> android:required="true"/> >> <uses-feature android:name="android.hardware.location.network" >> android:required="true"/> >> <uses-feature android:name="android.hardware.location.gps" >> android:required="true"/> >> >> Following is my complete Java code that only works when device's GPS is on, >> in both GPS and network cases. >> >> package com.example.administrator.locationgetter; >> >> import android.Manifest; >> import android.app.Activity; >> import android.content.pm.PackageManager; >> import android.location.Location; >> import android.location.LocationListener; >> import android.location.LocationManager; >> import android.os.Bundle; >> import android.support.design.widget.FloatingActionButton; >> import android.support.design.widget.Snackbar; >> import android.support.v4.app.ActivityCompat; >> import android.support.v7.app.AppCompatActivity; >> import android.support.v7.widget.Toolbar; >> import android.util.Log; >> import android.view.View; >> import android.view.Menu; >> import android.view.MenuItem; >> import android.widget.Toast; >> >> public class MainActivity extends Activity { >> public static final int MY_PERMISSIONS_REQUEST = 0; >> >> LocationManager locationManager; >> >> private LocationListener mLocationListener; >> >> >> private void showStatus(String st) >> { >> Toast.makeText(MainActivity.this,st,Toast.LENGTH_SHORT).show(); >> } >> private LocationListener createLocationListener() { >> return new LocationListener() { >> @Override >> public void onLocationChanged(Location location) { >> // Called when a new location is found by the network >> location provider. >> Toast.makeText(MainActivity.this,"accuracy: " + >> location.getAccuracy() + " lat: " + location.getLatitude() + " lon: " + >> location.getLongitude(),Toast.LENGTH_SHORT).show(); >> } >> >> public void onStatusChanged(String provider, int status, Bundle >> extras) { >> showStatus(provider + " -- " + status); >> } >> >> public void onProviderEnabled(String provider) { >> showStatus(provider + " -- " + "ENABLED!"); >> } >> >> public void onProviderDisabled(String provider) { >> showStatus(provider + " -- " + "DISABLED!"); >> } >> >> >> }; >> } >> >> @Override >> protected void onCreate(Bundle savedInstanceState) { >> >> super.onCreate(savedInstanceState); >> setContentView(R.layout.activity_main); >> >> Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); >> //setSupportActionBar(toolbar); >> >> mLocationListener = createLocationListener(); >> 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(); >> } >> }); >> } >> >> @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) { >> >> int id = item.getItemId(); >> >> //noinspection SimplifiableIfStatement >> if (id == R.id.action_settings) { >> return true; >> } >> >> return super.onOptionsItemSelected(item); >> } >> >> @Override >> public void onRequestPermissionsResult(int requestCode, >> String permissions[], int[] grantResults) { >> switch (requestCode) { >> case MY_PERMISSIONS_REQUEST: { >> // If request is cancelled, the result arrays are empty. >> if (grantResults.length > 0 >> && grantResults[0] == >> PackageManager.PERMISSION_GRANTED) { >> locationManager = (LocationManager) >> this.getSystemService(LOCATION_SERVICE); >> >> locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, >> 0, mLocationListener); >> >> } else { >> Toast.makeText(MainActivity.this, "So sad! Give me the >> damn permissions!", Toast.LENGTH_SHORT).show(); >> >> } >> return; >> } >> } >> } >> >> public void btnLocation(View v) { >> >> if ((ActivityCompat.checkSelfPermission(this, >> Manifest.permission.ACCESS_COARSE_LOCATION) != >> PackageManager.PERMISSION_GRANTED) || >> (ActivityCompat.checkSelfPermission(this, >> Manifest.permission.ACCESS_FINE_LOCATION) != >> PackageManager.PERMISSION_GRANTED )){ >> showStatus("Give me the permissions man!"); >> ActivityCompat.requestPermissions(this, >> new String[]{ >> Manifest.permission.ACCESS_COARSE_LOCATION, >> Manifest.permission.ACCESS_FINE_LOCATION}, >> MY_PERMISSIONS_REQUEST); >> } >> else >> { >> showStatus("Already have permission"); >> locationManager = (LocationManager) >> this.getSystemService(LOCATION_SERVICE); >> String locationProvider = LocationManager.NETWORK_PROVIDER; >> Location location = >> locationManager.getLastKnownLocation(locationProvider); >> if(location != null) >> { >> Toast.makeText(MainActivity.this,"accuracy: " + >> location.getAccuracy() + " lat: " + location.getLatitude() + " lon: " + >> location.getLongitude(),Toast.LENGTH_SHORT).show(); >> } >> >> locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, >> 0, mLocationListener); >> >> } >> } >> public void btnLocation1(View v) { >> >> if ((ActivityCompat.checkSelfPermission(this, >> Manifest.permission.ACCESS_COARSE_LOCATION) != >> PackageManager.PERMISSION_GRANTED) || >> (ActivityCompat.checkSelfPermission(this, >> Manifest.permission.ACCESS_FINE_LOCATION) != >> PackageManager.PERMISSION_GRANTED )){ >> showStatus("Give me the permissions man!"); >> ActivityCompat.requestPermissions(this, >> new String[]{ >> Manifest.permission.ACCESS_COARSE_LOCATION, >> Manifest.permission.ACCESS_FINE_LOCATION}, >> MY_PERMISSIONS_REQUEST); >> } >> else >> { >> showStatus("Already have permission"); >> locationManager = (LocationManager) >> this.getSystemService(LOCATION_SERVICE); >> String locationProvider = LocationManager.GPS_PROVIDER; >> Location location = >> locationManager.getLastKnownLocation(locationProvider); >> if(location != null) >> { >> Toast.makeText(MainActivity.this,"accuracy: " + >> location.getAccuracy() + " lat: " + location.getLatitude() + " lon: " + >> location.getLongitude(),Toast.LENGTH_SHORT).show(); >> } >> >> locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, >> mLocationListener); >> >> } >> } >> } >> >> >> I have tested the application on KitKat, Lollipop and Marshmallow, all >> have the same results. >> >> >> If you download the baidu maps and launch the app it will ask you to >> grant the permission for location access, just make sure that your location >> is turned off and simply grant the location permission to baidu map you >> will notice that it will point your location on baidu maps even if your gps >> or location service is off. >> >> >> >> -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/android-developers. To view this discussion on the web visit https://groups.google.com/d/msgid/android-developers/8ef6a783-85c1-40b7-8254-97b9272c78a2%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

