7

В ОС Android, в «Настройке» -> «Геолокации», есть кнопка переключения под названием «Доступ к моему месту», который может быть использован для отключения & включить доступ к информации о местоположении из приложений.Прослушивания местонахождения отключить доступ/включить в настройках

В настоящее время я разрабатываю приложение для определения местоположения. Мне интересно, как я могу слушать эту настройку в своем Android-проекте? Есть ли радиовещательный приемник, который я могу использовать, чтобы узнать сразу, когда пользователь отключил или включил «Доступ к моему местоположению»?

Если для этого нет вещательного приемника, как я могу слушать это изменение в своем проекте Android?

+1

@ GrlsHu, нет, я не хочу, чтобы сделать это. Ключевым моментом моего вопроса является прослушивание этой настройки доступа к местоположению. – Mellon

+0

http://stackoverflow.com/a/20673766/1994950 и http://stackoverflow.com/a/23756293/1994950 помогут – Kushal

ответ

0

Вы можете использовать следующий код, чтобы проверить, является ли Enable Место службы или не

LocationManager lm = null; 
boolean gps_enabled,network_enabled; 
    if(lm==null) 
     lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    try{ 
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    }catch(Exception ex){} 
    try{ 
    network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
    }catch(Exception ex){} 

    if(!gps_enabled && !network_enabled){ 
     dialog = new AlertDialog.Builder(context); 
     dialog.setMessage(context.getResources().getString(R.string.gps_network_not_enabled)); 
     dialog.setPositiveButton(context.getResources().getString(R.string.open_location_settings), new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
       // TODO Auto-generated method stub 
       Intent myIntent = new Intent(Settings.ACTION_SECURITY_SETTINGS); 
       context.startActivity(myIntent); 
       //get gps 
      } 
     }); 
     dialog.setNegativeButton(context.getString(R.string.Cancel), new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     dialog.show(); 

    } 
+2

Привет, мой вопрос не в том, как проверить ценность, а о том, как слушать изменение, означающее, что, как получить уведомление в коде, пользователь изменил этот доступ к местоположению в настройках и затем получил измененное значение. – Mellon

+0

@GrIsHu Это неверно. Вы пробовали решение usman ниже? –

5

Это работает для меня:

Добавить приемник в файл манифеста:

<receiver 
     android:name="com.eegeo.location.LocationProviderChangedReceiver"> 
     <intent-filter> 
      <action android:name="android.location.PROVIDERS_CHANGED" /> 
     </intent-filter> 
    </receiver> 

Проверить и поставщики услуг в приемнике:

public class LocationProviderChangedReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     boolean anyLocationProv = false; 
     LocationManager locationManager = (LocationManager) MyMainActivity.context.getSystemService(Context.LOCATION_SERVICE); 

     anyLocationProv |= locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     anyLocationProv |= locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     Log.i("", "Location service status" + anyLocationProv); 


    } 

} 

Хотя этот приемник называется более одного раза по очевидным причинам, но это скажет вам статус.

+1

Явный широковещательный приемник должен использоваться только в том случае, если приложение нуждается в местоположении в фоновом режиме. Он должен использовать приемник вещания во время выполнения в противном случае –

1

Вы можете сделать это намного проще. В вашей BroadcastReceiver в OnReceive() метод:

ContentResolver contentResolver = getContext().getContentResolver(); 
    // Find out what the settings say about which providers are enabled 
    int mode = Settings.Secure.getInt(
      contentResolver, Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); 

    if (mode == Settings.Secure.LOCATION_MODE_OFF) { 
     // Location is turned OFF! 
    } else { 
     // Location is turned ON! 
    } 

~ Благодаря этому коду: LocationManagerTest.java

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

  • Нет связанных вопросов^_^