检查是否启用了“访问我的位置” – Android

我有一个使用位置的Android应用程序。 但我注意到,如果用户在“设置”>“位置”访问权限中禁用“访问我的位置”,则无法继续操作。 如何检查它是否已启用? 如果它被禁用,如何从我的应用程序打开这些设置?

谢谢

解决了 :

String locationProviders = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if (locationProviders == null || locationProviders.equals("")) { ... startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } 

  • 位置getAccuracy()这个函数做什么?
  • 融合位置提供程序setsmallestDisplacement在Android中不起作用
  • 如何从GridView获取滚动位置?
  • 如果用户选择“从不”选项,则为Android启用位置服务
  • 如何在微调器中设置位置?
  • 如何在TextView中获取ClickableSpan的坐标?
  • 使用Google Play服务位置在Android中唤醒过多的警报管理器
  • (上面)按钮上的Textview在Android 5(API 21)中不起作用
  • 可能这将是有用的检查这个网站它讨论的位置服务

    http://www.scotthelme.co.uk/android-location-services/

    你可以这样检查:

     LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) // Return a boolean 

    编辑:

    如果要检查网络提供商:

     LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) // Return a boolean 

    编辑2:

    如果要打开设置,可以使用此意图:

     Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 

    不使用Settings.Secure而不扫描所有位置提供程序的另一种方法是:

     LocationManager locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE); int providersCount = locationManager.getProviders(true).size(); // Listing enabled providers only if (providersCount == 0) { // No location providers at all, location is off } 

    不幸的是,自API 19以来,似乎不推荐使用Settings.Secure.LOCATION_PROVIDERS_ALLOWED

    一种新的方法是:

     int locationMode = Settings.Secure.getInt( getContentResolver(), Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF // Default value if not found ); if (locationMode == Settings.Secure.LOCATION_MODE_OFF) { // Location is off } 

    有两种方法可以检查位置,1 – 使用GPS 2使用网络提供商,它更好地检查两种服务是否启用。对于使用此方法:)

     public boolean checkServices(){ //check location service LocationManager locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE); if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ return true; } }