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.

Reply via email to