Возможно ли, чтобы приложение для Android ограничивало другие приложения только WiFi (без рута)?

Мне было интересно, можно ли сделать приложение для Android (которое не требует рута), которое могло бы включать и отключать использование мобильных данных для других приложений? Я знаю, что в родных настройках Android есть функция переключения фоновых служб для каждого приложения, так что, возможно, у меня есть какие-то общедоступные методы, чтобы сделать это с моим собственным приложением.

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

Указание мне на правильное направление будет принята с благодарностью.


person Community    schedule 16.12.2013    source источник


Ответы (1)


Теоретически да.

См.: https://github.com/android/platform_frameworks_base/blob/dbc51de44fe4f9a7f81528204250de32ec405d39/cmds/svc/src/com/android/commands/svc/DataCommand.java

Это инструмент svc, который можно запустить через adb shell. Однако у меня возникла ошибка с кодом 137 (без рута Nexus 5). Но из кода видно, как это теоретически должно работать.

Вы получаете TelephonyManager и enableDataConnectivity, что, конечно же, скрытый API (см.: https://github.com/android/platform_frameworks_base/blob/6b8a3a52acf1c2722551f1ea1ce47831f87939cd/telephony/java/com/android/internal/telephony/ITelephony.aidl). Доступ к скрытым API возможен путем перекомпиляции файла android.jar, с которым вы строите, или с помощью отражения (см.: Как создать Android SDK с доступными скрытыми и внутренними API?).

Надеюсь это поможет.

person soulseekah    schedule 16.12.2013