Как включить/выключить GPS на G1 программно

Единственной возможностью включать/выключать GPS на Android программно это использовать рефлексию, чтобы получить доступ к приватному методу updateProviders. Он оповещает LocationManager о том, что произошли изменения в информации о location-провайдерах и необходимо их зафиксировать.

LocationManager myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

private boolean getGPSStatus()
{
String allowedLocationProviders =
Settings.System.getString(getContentResolver(),
Settings.System.LOCATION_PROVIDERS_ALLOWED);

if (allowedLocationProviders == null) {
allowedLocationProviders = "";
}

return allowedLocationProviders.contains(LocationManager.GPS_PROVIDER);
}

private void setGPSStatus(boolean pNewGPSStatus)
{
String allowedLocationProviders =
Settings.System.getString(getContentResolver(),
Settings.System.LOCATION_PROVIDERS_ALLOWED);

if (allowedLocationProviders == null) {
allowedLocationProviders = "";
}

boolean networkProviderStatus =
allowedLocationProviders.contains(LocationManager.NETWORK_PROVIDER);

allowedLocationProviders = "";
if (networkProviderStatus == true) {
allowedLocationProviders += LocationManager.NETWORK_PROVIDER;
}
if (pNewGPSStatus == true) {
allowedLocationProviders += "," + LocationManager.GPS_PROVIDER;
}

Settings.System.putString(getContentResolver(),
Settings.System.LOCATION_PROVIDERS_ALLOWED, allowedLocationProviders);    

try
{
Method=
myLocationManager.getClass().getMethod("updateProviders"new Class[] {});
m.setAccessible(true);
m.invoke(myLocationManager, new Object[]{});
}
catch(Exception e)
{
Log.e("Произошло исключение: ", e.getClass().getName());
}
return;
}

Возможность использовать рефлексию отключили в SDK версии 1.0 R2.

Сейчас на сайте

Сейчас на сайте 0 пользователей и 1 гость.

Вход в систему

android

Комментарии