Как включить/выключить 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 m =
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.
Комментарии
7 недель 2 дня назад
16 недель 5 дней назад
19 недель 2 дня назад
23 недели 1 день назад
23 недели 2 дня назад
23 недели 3 дня назад
23 недели 3 дня назад
24 недели 5 дней назад
25 недель 1 день назад
25 недель 4 дня назад