mwiacek.comColorColor | Mobile  
APN 2.0 czyli jak sobie ułatwiłem życie w Androidzie.... (2014)
Submitted by marcin on Sun 12-Jan-2014

Polski
Polski blog
Android
GSM
dobreprogramy.pl
APN



Dawno, dawno temu ktoś wymyślił, że MMSy i dostęp do Internetu w sieciach komórkowych wymaga ustawień takich jak adres komputera operatora. Użytkownicy zaczęli je pracowicie przepisywać z materiałów operatorów do swoich urządzeń, czasem operator pozwalał na przesłanie ich na urządzenie SMSem (w tamtych czasach takie SMS potrafiły też tworzyć aplikacje typu Open Source, czyli nie chwaląc się np. "moje" Gammu). Nie zawsze to jednak działało i wiedza ta dalej sprawiała wrażenie tajemnej....

Z czasem pojawił się Android, który zawierał w pliku XML zestawy jakichś domyślnych ustawień, co częściowo załatwiło sprawę, ale też wprowadziło zamęt, bo system nie bywał zbyt często uaktualniany przez producentów.

Android obecnie jest na tabletach, w telefonach, w zegarkach, nawet czytnikach książek.... I co tu zrobić ?

Dawno temu pomyślałem, że na własne potrzeby poświęcę kilka nocy i zrobię prostą aplikację, która będzie w określonych momentach ustawiać to za mnie. I jeszcze rozszerzę ideę - Android ustawia APNy stosownie do kodu sieci karty SIM, aplikacja miała to robić dla kodu sieci i nazwy sieci zapisanej na karcie SIM.

Dane te zapisywane są w wewnętrznej bazie SQLite i nieudokumentowane....ale od czegóż jest Internet ? :)

Niestety wujek Gugiel z czasem wymyślił sobie, że ich zapis ma być niedostępny (od 4.0), a później od 4.2 zablokowano nawet ich odczyt....a dokładniej mówiąc jest on dostępny tylko dla aplikacji, które zostały dostarczone przez producenta (tj. aplikacji systemowych).

I tu dochodzimy do sedna - żeby móc coś zrobić ciekawego w nowszych urządzeniach, dalej trzeba mieć do nich pełen dostęp (żeby aplikacja była systemową czyli w /system/app, to trzeba ją albo wgrać flasherem albo mieć tzw. roota i użyć linii komend). Mówiąc inaczej:

  1. trzeba używać aplikacji flashujących np. producenta (i wgrać paczkę plików wraz z aplikacją gdzie trzeba) lub
  2. szukać aplikacji, które uzyskują roota poprzez luki w zabezpieczeniach (ZergRush, Cydia Impactor, Kingo Root, itd.) i użyć linii komend lub
  3. flashować tzw. insecure kernel, dodać co potrzeba do roota, (flashować secure kernel), użyć linii komend....

W zależności od zastosowanego rozwiązania można niestety stracić gwarancję (np. wieść niesie, że dzieje się tak w Samsungach po ustawieniu flagi Knox na 0x01)

To jest też jedna ze słabości Androida - niestety pomimo zgłoszenia problemu wujkowi Gugielowi (bądź co bądź taki odczyt danych APN może być naprawdę często i gęsto przydatny) trzeba korzystać z czasem podejrzanych rozwiązań (taką sławą cieszy lub przynajmniej cieszył się się np. Kingo Root).

Ale nic to.... Aplikację niedawno przepisałem do wersji 2.0 i obecnie:

  • pokazuje systemową bazę ustawień internetowych/MMS
  • domyślnie zawiera bazę dla różnych polskich operatorów (Plus, mBank mobile, T-Mobile.pl, heyah, Orange, Play, Aero2, Manta Mobile, Red Bull MOBILE, FM GROUP MOBILE, Virgin mobile, INEA)
  • może korzystać z bazy wbudowanej (można ją eksportować) lub zewnętrznego pliku z danymi - format taki jak pliku androidowego z dodanym parametrem op dla każdego wpisu
  • może ustawiać APNy ręcznie, przy starcie lub przy zmianie typu sieci (przy czym jeśli znajdzie ustawienia ze "swoją" nazwą, to ich generalnie nie zmienia przez co można je dowolnie zmienić "po swojemu" i mieć dalej włączoną aplikację)
  • może wyłączać Internet przez dodanie 'apndroid' na końcu nazwy APN np. gdy sieć nie jest LTE (co pozwoli kontrolować koszty np. w Play i Red Bull jeśli korzystamy z promocji 30 złotowych) - być może jest do tego jakieś API, ale ja go nie znam
  • dla niektórych telefonów DualSIM (np. i9192) pokazuje część danych drugiej karty SIM - więcej nie umiem odczytać, a że we wszystkich urządzeniach tego typu producenci muszą stosować swoje czasem bardzo radosne rozwiązania, to niestety aplikacja chyba na razie skończy tylko na obsłudze pierwszego SIMa tak jak SDK przykazał

Potrzebne jest niestety kilka uprawnień:

  1. WRITE_APN_SETTINGS - do zmiany APN w każdej wersji Androida i odczytu w Androidzie 4.2 i późniejszym (przy czym powtórzę: potrzebne jest też ustawienie jako aplikacja systemowa w wyższych wersjach Androida)
  2. RECEIVE_BOOT_COMPLETED - żeby móc się uaktywnić po starcie systemu
  3. READ_PHONE_STATE - odczyt danych sieci i karty SIM
  4. WRITE_EXTERNAL_STORAGE i READ_EXTERNAL_STORAGE - zapis i odczyt pliku z danymi

I tak w kilka wieczorów dało się załatwić odwieczny problem w ok. 36 kB - mam nadzieje, że wiadomość o tym, że istnieje coś podobnego polskiego przyda się komuś (a może ktoś się zdecyduje na kontakt w celu zlecenia jakiejś dłubaninki lub przekazania np. jakichś BitCoinów lub PeeLeNów, bo nic innego tak nie motywuje do podobnego pisania) i że ten poniekąd kryptoreklamowy tekst nie będzie źle przyjęty :)

PS. Jedyną niedogodnością jest, że czasami system pomimo oznaczania APNu do Internetu jako domyślny nie włącza go i trzeba to robić ręcznie z menu systemowego (o podobnej operacji nie wspomnę w telefonach DualSIM - patrz jeden z punktów powyżej)

PS2. Jeszcze link: APN