【问题标题】:Check if user disable GPS in settings in android检查用户是否在 android 的设置中禁用 GPS
【发布时间】:2016-03-29 19:50:53
【问题描述】:

有什么解决方案可以检查用户是否在设置中禁用 GPS? 我打开我的应用程序,打开 android 系统的顶部工具栏,禁用 GPS 并关闭此工具栏。在这一刻,我想应用程序检查 GPS 的状态是否已更改。 我在 onResume() 中使用检查 GPS 是否处于活动状态,但此解决方案仅在用户启用 GPS 时才有效,当禁用 onResume() 时未调用。 有什么想法吗?

编辑: 这是五月课:

public class PrivacyActivity extends BaseActivity  implements GpsStatus.Listener, LocationListener{


   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_privacy);

   }

   @Override
   protected void onPause() {
      super.onPause();
   }

   @Override
   protected void onResume() {
      super.onResume();
   }

   @Override
   public void onGpsStatusChanged(int event) {
      switch (event) {
         case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
            Toast.makeText(this, "ads", Toast.LENGTH_LONG).show();

            break;
         case GpsStatus.GPS_EVENT_FIRST_FIX:
            Toast.makeText(this, "ads1", Toast.LENGTH_LONG).show();

            break;
      }
   }

   @Override
   public void onLocationChanged(Location location) {

   }

   @Override
   public void onStatusChanged(String provider, int status, Bundle extras) {
      Toast.makeText(getApplicationContext(), "ads2", Toast.LENGTH_LONG).show();
   }

   @Override
   public void onProviderEnabled(String provider) {
      Toast.makeText(getApplicationContext(), "ads2", Toast.LENGTH_LONG).show();
   }

   @Override
   public void onProviderDisabled(String provider) {
      Toast.makeText(getApplicationContext(), "ads2", Toast.LENGTH_LONG).show();
   }
}

当我禁用 gps 时,我没有看到 toast。

【问题讨论】:

标签: android


【解决方案1】:

你可以使用 LocationListener 类

// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      // Called when a new location is found by the network location provider.
      makeUseOfNewLocation(location);
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}

    public void onProviderEnabled(String provider) {
        Log.i("Example", "GPS is ON");
    }

    public void onProviderDisabled(String provider) {
        Log.i("Example", "GPS is OFF");
    }
  };

// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

您可以在http://developer.android.com/guide/topics/location/strategies.html获取更多信息

【讨论】:

    【解决方案2】:

    首先引用locationListener。

    LocationListener locationListener;
    
    locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                LatLng myPlace = new LatLng(location.getLatitude(), location.getLongitude());
                mMap.addMarker(new MarkerOptions().position(myPlace).title("me"));
                mMap.moveCamera(CameraUpdateFactory.newLatLng(myPlace));
                mMap.animateCamera(CameraUpdateFactory.zoomTo(8.0f));
            }
    
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
    
            }
    
            @Override
            public void onProviderEnabled(String provider) {
    
            }
    
            @Override
            public void onProviderDisabled(String provider) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent);
            }
        };
    

    如果用户从设置中禁用 GPS,将触发 onProviderDisabled 方法。 方法内部的意图将直接将用户带到位置设置。

    经过测试,工作正常。

    【讨论】:

      猜你喜欢
      • 2016-07-07
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多