Что мне нужно сделать после рутирования и запроса прав суперпользователя, чтобы включить / отключить GPS в моем приложении?

2
Kyle Flanigan 22 Май 2011 в 04:16

3 ответа

Лучший ответ

Вы не должны защищать конфиденциальность пользователя. Однако это возможно, воспользовавшись ошибкой. Посмотрите, как:

Как программно включить или отключить GPS на Android?

Обратите внимание, что это может работать не на всех версиях Android - см.
https://android.googlesource.com/platform/packages/appsource.com/platform/packages/appsource Настройки / + / 4b21f7cd9424eeb83838071a4419912ee5d5e41d

Где они указывают, что это было исправлено, но я не уверен, в каких версиях есть исправление (если есть).

1
Vadim Kotov 25 Июл 2017 в 20:57

ON Rooted Device попробуйте это просто используйте su для включения gps в режиме высокой точности

 Process proc=Runtime.getRuntime().exec(new String[]{"su",
"pm grant com.your_app_packagename android.permission.WRITE_SECURE_SETTINGS",
"settings put secure location_providers_allowed gps,network,wifi"});
 proc.waitFor();

Запустите эту команду в фоновом потоке :)

Далее вы можете обратиться к этой ссылке здесь

2
Dayvon 21 Апр 2016 в 09:25

Этот код работает на телефонах ROOTED , если приложение перемещено на /system/aps, и у них есть следующие разрешения в манифесте :

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>

Код

private void turnGpsOn (Context context) {
    beforeEnable = Settings.Secure.getString (context.getContentResolver(),
                                              Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    String newSet = String.format ("%s,%s",
                                   beforeEnable,
                                   LocationManager.GPS_PROVIDER);
    try {
        Settings.Secure.putString (context.getContentResolver(),
                                   Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
                                   newSet); 
    } catch(Exception e) {}
}


private void turnGpsOff (Context context) {
    if (null == beforeEnable) {
        String str = Settings.Secure.getString (context.getContentResolver(),
                                                Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        if (null == str) {
            str = "";
        } else {                
            String[] list = str.split (",");
            str = "";
            int j = 0;
            for (int i = 0; i < list.length; i++) {
                if (!list[i].equals (LocationManager.GPS_PROVIDER)) {
                    if (j > 0) {
                        str += ",";
                    }
                    str += list[i];
                    j++;
                }
            }
            beforeEnable = str;
        }
    }
    try {
        Settings.Secure.putString (context.getContentResolver(),
                                   Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
                                   beforeEnable);
    } catch(Exception e) {}
}
1
Yohanim 16 Май 2017 в 07:33