Android SDK: Budynku zlokalizowane Rozmówki
Polish (Polski) translation by Max Benjamin (you can also view the original English article)
W tym poradniku dowiesz się, jak tworzyć i wykorzystywać alternatywne pliki zasobów aplikacji na Androida o nazwie minuta rozmówki. Ta aplikacja wyświetla zdefiniowany tekst i grafikę na bazie systemu Android ustawienia regionalne i językowe oraz.
Przed Rozpoczęciem
Autorzy zakładając, że czytelnik posiada podstawową wiedzę z systemem Android i ma wszystkie niezbędne narzędzia, takie jak Eclipse i Android SDK, zainstalowany i działa. Przykłady podane tutaj są, aby pokazać, jak projekt Android-zasoby mogą być zlokalizowane. W szczególności, ten poradnik pokaże ci, jak włączyć zasoby dla różnych języków.
Uwaga: kod do aplikacji OneMinutePhrasebook jest również dostępny na GitHub.
Krok 1: tworzenie aplikacji OneMinutePhrasebook
Zacznijmy od utworzenia nowego projektu Android.
Do tego w Eclipse, wybierz Plik->Nowy projekt Android, aby uruchomić kreatora projektu Android.
Tytuł projektu: na przykład, "rozmówki"
Wybrać odpowiedni cel build, takich jak Android 2.1.
Nazwa aplikacji: na przykład, "jedna minuta rozmówki"
Nazwa pakietu: na przykład, com.mamlambo.artykuły.rozmówki
Tworzenie głównej aktywności, na przykład: PhrasebookActivity



Krok 2: skonfiguruj aplikację do debugowania
Będziesz debugowania aplikacji, więc trzeba ustawić atrybut debugowania w pliku manifestu systemu Android na true.



Krok 3: Tworzenie konfiguracji debugowania
Chcesz być w stanie łatwo uruchomić aplikację w emulatorze Android i urządzenia z Eclipse, więc trzeba stworzyć konfiguracji debugowania.
Do tego w Eclipse, wybierz "Uruchom" ->debugowanie....
Dwukrotnie kliknij na opcje projektu Android.
Nazwę nowej konfiguracji: "test rozmówki"
Wybierz projekt: rozmówki



Krok 4: Utwórz Zasoby W Postaci Ciągów Domyślnie
W jedną minutę rozmówki pojawia się język, a także kilka wierszy ("dzień dobry", "Do widzenia", "proszę", "dziękuję" i "pomocy!") na ekranie. Tak więc, należy dodać kilka ciągów zasobów w pliku /res/values/strings.xml . W szczególności, dodać jedną linię dla każdej frazy, a także etykiety dla każdej frazy. Ponadto, należy dodać wiersze dla flaga (etykieta), kartę (skrót), i CIA world Factbook link (Więcej o tym za chwilę).
Dla wierszy, domyślnie używamy jeden z najbardziej popularnych językach zrozumiałych na całym świecie–angielski. (Oczywiście, można wybrać inny język domyślny, jeśli chcesz.)
Wynikowy plik strings.xml powinno to wyglądać mniej więcej tak:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">The One Minute Phrasebook </string> <string name="locale_label">Locale: </string> <string name="locale">"World-Wide" </string> <string name="hello_label">Greet Someone: </string> <string name="hello">Hello!</string> <string name="goodbye_label">Say Farewell: </string> <string name="goodbye">Goodbye!</string> <string name="please_label">Say Please: </string> <string name="please">Please </string> <string name="thankyou_label">Thank Someone: </string> <string name="thankyou">Thank You! </string> <string name="help_label">Call for Aid: </string> <string name="help">Help! </string> <string name="flag_label">Flag: </string> <string name="map_label">Map: </string> <string name="cia_factbook_label">CIA World Factbook URL: </string> <string name="cia_factbook_url">"https://www.cia.gov/library/publications/the-world-factbook/index.html" </string> </resources>
Te wiersze domyślnie zasoby, które są używane w tym programie. Wiele aplikacji używa tylko zasoby domyślnie.
Krok 5: Tworzenie Innych Zasobów
W jedną minutę aplikację rozmówki wymaga również kilka innych rodzajów zasobów. W szczególności:
- Niektóre paski zasoby widget TextView kolor tekstu (/res/values/colors.xml)
- Niektóre pomiary zasobów na widget TextView rozmiar tekstu (/res/values/dimens.xml)
- Dwa pliki graficzne: jeden dla karty, i do flagi (/BIBL./płótno/flaga.PNG i /BIBL./płótno/mapa.APG)
Możesz dodać te zasoby, teraz, albo, jak budować układ. Flaga i mapa obrazy wykorzystane w tym podręczniku zostały zakupione z domeny publicznej obrazu, dostępne na stronie internetowej Światowego przewodnika CIA.
W sprawie domyślnie, będziemy mówić kodowanie w "świecie", i wyświetlać obraz z mnóstwem map świata, i na mapie świata.



Krok 6: Tworzenie jedną minutę rozmówki interfejs użytkownika
Dalej, zwróć swoją uwagę na projektowaniu interfejsu użytkownika aplikacji. W jedną minutę rozmówki-bardzo prosta aplikacja z jednym ekranem. Na ekranie są wyświetlane niektóre przydatne zwroty, flaga i mapa kraju, i link do strony Światowej książki faktów CIA na odpowiedni kraj.

Uwaga: Dla tej aplikacji, możemy za pomocą wirtualnego urządzenia z systemem Android (AVD-urządzenia) profil, co i poprzednio, z ekranem 800x480. Nie wahaj się stworzyć AVD do zgodności z dowolnego urządzenia masz na rękach do testowania z systemem Android.
Krok 7: realizacja interfejsu użytkownika
Ta aplikacja ma tylko jeden ekran, zdefiniowanych w pliku /res/layout/main.xml . To plik, który chcesz edytować.
W tym przypadku, chcemy, aby dobry, sformatowane kolumny, więc zastanów się, za pomocą kontroli TableLayout do formatowania tekstowego przedstawienia i kontroli ksiąg, zawierających słowa, flaga, mapa oraz link do kieszonkowy CIA world factbook.
Wynikowy plik layoutu main.xml powinno to wyglądać mniej więcej tak:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ScrollView android:id="@+id/ScrollView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TableLayout android:id="@+id/TableLayout01" android:layout_margin="@dimen/phrase_margin" android:layout_height="wrap_content" android:layout_width="fill_parent" android:stretchColumns="1"> <TableRow android:id="@+id/TableRow01" android:layout_height="wrap_content" android:layout_width="wrap_content"> <TextView android:id="@+id/TextView_LocaleLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/locale_label" android:textSize="@dimen/phrase_size" android:textColor="@color/locale_color"></TextView> <TextView android:id="@+id/TextView_Locale" android:layout_height="wrap_content" android:text="@string/locale" android:textSize="@dimen/phrase_size" android:textColor="@color/phrase_color" android:layout_width="wrap_content" android:layout_gravity="right"></TextView> </TableRow> <TableRow android:id="@+id/TableRow02" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView_HelloLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_label" android:textSize="@dimen/phrase_size" android:textColor="@color/label_color"></TextView> <TextView android:id="@+id/TextView_Hello" android:layout_height="wrap_content" android:text="@string/hello" android:textSize="@dimen/phrase_size" android:layout_width="wrap_content" android:textColor="@color/phrase_color" android:layout_gravity="right"></TextView> </TableRow> <TableRow android:id="@+id/TableRow03" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView_GoodbyeLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/goodbye_label" android:textSize="@dimen/phrase_size" android:textColor="@color/label_color"></TextView> <TextView android:id="@+id/TextView_Goodbye" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/goodbye" android:textSize="@dimen/phrase_size" android:textColor="@color/phrase_color" android:layout_gravity="right"></TextView> </TableRow> <TableRow android:id="@+id/TableRow04" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView_PleaseLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/please_label" android:textSize="@dimen/phrase_size" android:textColor="@color/label_color"></TextView> <TextView android:id="@+id/TextView_Please" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/please" android:textSize="@dimen/phrase_size" android:textColor="@color/phrase_color" android:layout_gravity="right"></TextView> </TableRow> <TableRow android:id="@+id/TableRow05" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView_ThankyouLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/thankyou_label" android:textSize="@dimen/phrase_size" android:textColor="@color/label_color"></TextView> <TextView android:id="@+id/TextView_Thankyou" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/thankyou" android:textSize="@dimen/phrase_size" android:textColor="@color/phrase_color" android:layout_gravity="right"></TextView> </TableRow> <TableRow android:id="@+id/TableRow06" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView_HelpLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/help_label" android:textSize="@dimen/phrase_size" android:textColor="@color/label_color"></TextView> <TextView android:id="@+id/TextView_help" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/help" android:textSize="@dimen/phrase_size" android:textColor="@color/phrase_color" android:layout_gravity="right"></TextView> </TableRow> </TableLayout> <TableLayout android:id="@+id/TableLayout02" android:layout_margin="@dimen/phrase_margin" android:layout_height="wrap_content" android:layout_width="fill_parent"> <TableRow android:id="@+id/TableRow07" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView_FlagLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/flag_label" android:textSize="@dimen/phrase_size" android:textColor="@color/label_color"></TextView> </TableRow> <TableRow android:id="@+id/TableRow08" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/flag" android:adjustViewBounds="true" android:saveEnabled="true"></ImageView> </TableRow> <TableRow android:id="@+id/TableRow09" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView_MapLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/map_label" android:textSize="@dimen/phrase_size" android:textColor="@color/label_color"></TextView> </TableRow> <TableRow android:id="@+id/TableRow10" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/ImageViewMap" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/map"></ImageView> </TableRow> <TableRow android:id="@+id/TableRow11" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView_CIAFactbookLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/phrase_size" android:textColor="@color/label_color" android:text="@string/cia_factbook_label"></TextView> </TableRow> <TableRow android:id="@+id/TableRow12" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView_help" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/phrase_size" android:textColor="@color/phrase_color" android:layout_gravity="right" android:text="@string/cia_factbook_url" android:autoLink="web"></TextView> </TableRow> </TableLayout> </LinearLayout> </ScrollView> </LinearLayout>
Krok 8: uruchom aplikację
Nadszedł czas, aby uruchomić aplikację po raz pierwszy. Do tego w Eclipse, wybierz "Uruchom" ->konfiguracja debugowania. Wybierz rozmówki Testowa konfiguracja, a następnie kliknij przycisk "debug".



Krok 9: zmiana urządzenia lub emulatora język
Teraz nadszedł czas, aby nauczyć się języka ustawienia emulatora lub urządzenia. Aby wyświetlić i zmienić ustawienia regionalne na ekranie głównym, naciśnij przycisk Menu i wybierz Ustawienia->Język i klawiatura->wybierz język.
Spróbuj zmienić ustawienia regionalne w obcym języku nie znacie.
Ostrzeżenie: należy pamiętać, że jeśli zmienisz język i pozostawić ustawienia, musisz być w stanie powrócić do ekranu ustawień w tym języku. Zapamiętać lub rejestrować naciśnięcia klawiszy, aby zrobić to może uprościć robię tak.
Zwróć uwagę, jak zmienić menu w tym języku. Uruchom jedną minutę aplikację rozmówki w tym regionie. Należy pamiętać, że aplikacja nie pojawia się inaczej, niż do zmiany ustawień narodowych—ona wciąż jest wyświetlany w języku angielskim.
Teraz zmień swoje preferowane ustawienia regionalne. Teraz przejdź na swój ulubiony język. Mój angielski (STANY zjednoczone).

Uwaga: emulator ma wszystkie opcje, które są dostępne narodowych w tej wersji SDK dla Androida. Jednak konkretne urządzenia mogą mieć ograniczony zestaw miejsc do wyboru.
Krok 10: Zrozumienia Tego, Jak Android Zarządza Zasobami
Za każdym razem na ekranie będzie прорисовываться w aplikacji dla systemu Android, system operacyjny Android próbuje dopasować maksymalną zasobów projektu do pracy. W wielu przypadkach aplikacje zawierają tylko jeden zestaw zasobów—zasoby domyślnie.
Gdy alternatywne zasoby, które są zawarte w aplikacji jako część ich pakiet, system operacyjny Android zawsze próbuje pobrać najbardziej specyficznych zasobów.
Alternatywne zasoby mogą być tworzone dla różnych kryteriów, w tym, ale nie ograniczając się do, języków i regionów, właściwości ekranu i metody urządzenie wejściowe. Niektóre typowe zasoby alternatywne dla języków, powiatów i orientacji ekranu (układy zwłaszcza). Kryteria są zorganizowane hierarchicznie i każdy rodzaj filtra może być używany jako sufiks na odpowiednią nazwę projektu katalog zasobów.
Alternatywne zasoby należy stosować takie same nazwy, jak zasoby domyślnie. Rozdzielczość zasób Android jest najlepiej pokazuje przykład. W tym poradniku skupiamy się tylko na tworzenie alternatywnych środków dla konkretnych języków i regionów.
Krok 11: utwórz alternatywne zasoby w postaci ciągów dla krajów francuskojęzycznych
Teraz załóżmy, że chcesz, aby dodać wsparcie dla francuskojęzycznych regionów. Można łatwo to zrobić poprzez dodanie alternatywnego wiersza zasobów w projekcie. Na przykład, można zostawić zdanie napisy w języku angielskim, ale przetłumaczyć aktualnych zwrotów na język francuski.
Możesz dodać zasoby językowe dla każdego projektu, tworząc specjalnie nazwanych katalogów projektu. Po prostu zaakceptować istniejącą nazwę katalogu projektu (np. /BIBL./wartości) i dodać odrobinę następuje dwuliterowy kod języka, jak określono w ISO 639-2. Tak, na przykład języka angielskiego-en, francuski-francuski, hiszpański-Es, niemiecki de, itp.
Można dodać jeden zestaw francuski przetłumaczone wiersza w pliku /res/values-fr/strings.xml . Te wiersze są ładowane za każdym razem, gdy francuskojęzycznej narodowych jest włączona. Wszelkie inne ustawienia regionalne będą nadal korzystać z poleceń domyślnie.
Każdy z alternatywnych ciągów zasobu muszą mieć taką samą nazwę jako zasobu domyślna (przechowywany w /res/values/strings.xml). System operacyjny Android będzie wybrać najbardziej konkretny zasób jest dostępny w czasie wykonywania. Nie trzeba dostarczyć tłumaczenie wszystkich wierszy, tylko ci, co chcesz zmienić w wyborze francuskojęzycznych język.
Wynikowy plik /res/values-fr/strings.xml powinno to wyglądać mniej więcej tak:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Bon jour!</string> <string name="goodbye">Au revoir!</string> <string name="please">"S'il vous plaît"</string> <string name="thankyou">Merci!</string> <string name="help">Au Secours!</string> </resources>
Należy pamiętać, że może być konieczne, aby zacytować wiersz zasobów, jeśli zawierają pojedyncze cudzysłowy same (takie, jak "S cię proszę").
Krok 12: utwórz alternatywne zasoby w postaci ciągów dla poszczególnych krajów
Teraz, po ustaleniu, francuski zasoby w postaci ciągów (fraz), które mogą być wspólne dla wszystkich francuskojęzycznych dzielnic i obszarów, chcesz stworzyć alternatywne zasoby w postaci ciągów dla poszczególnych krajów: Belgia, Kanada, Francja i Szwajcaria.
Każdy kraj powinien:
- Wiersz zakresie ustawień narodowych
- Światowy kieszonkowy CIA wiersz URL
Platforma Android obsługuje językowe alternatywne zasoby (takie, jak utworzony w poprzednim kroku). Jednakże, nie można utworzyć region-specyficzne zasoby bez języka. Zamiast tego, należy włączyć język i kod kraju nazwa katalogu zasobu.
Do tworzenia funduszy, charakterystycznych dla regionu, trzeba użyć swój język (w tym przypadku "fr"), a następnie kreska, a następnie jego kod regionalny w formie "rxx W" gdzie XX to kod regionu, kraju, jak określono w ISO 3166-1-Alpha-2, a kod.
Na przykład, opcje regionalne i kody dla francuskojęzycznych krajach jest obsługiwane w systemie Android będzie:
Belgia: Fra-Rohe
Kanada: fr-rka
Francja: Fra-ręce fwr
Szwajcaria: Fra-РКБ
Tak więc, na przykład, można utworzyć plik strings.xml w /w res/wartości-fr-Rohe projekt katalogu dla ciągów wartości, w szczególności dla francuskiego (Belgia) parametr ustawień narodowych.
/res/values-fr-rBE/strings.xml może wyglądać tak:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="locale">Belgium</string> <string name="cia_factbook_url">https://www.cia.gov/library/publications/the-world-factbook/geos/be.html</string> </resources>
Krok 13: tworzenie alternatywnego Dolarowe zasobów dla poszczególnych krajów
Alternatywne zasoby mogą być tworzone dla innych typów danych oprócz wiersza. Można utworzyć dodatkowe zasoby do każdego rodzaju zasobów, w tym wiersze, rozmiary, kolory, karty zasobów i inne. Wystarczy wykorzystać jeden i ten sam projekt zasad hierarchii katalogów zasobów.
Dlatego, aby dodać flaga i mapa dolarowe zasobów dla poszczególnych krajów (Belgia, Francja, Kanada, Szwajcaria), trzeba utworzyć cztery nowe katalogów projektu:
- Sklep belgijskiego flagi.PNG i mapie.png grafiki w /BIBL./płótno-fr-Rohe katalog/.
- Sklep kanadyjska flaga.PNG i mapie.png grafiki w /BIBL./płótno-fr-rka katalog/.
- Sklep szwajcarskiej flagi.PNG i mapie.png grafiki w /BIBL./płótno-fr-РКБ katalog/.
- Sklep francuskiej flagi.PNG i mapie.png grafiki w /BIBL./płótno-fr-ręce fwr katalog/.
Należy pamiętać, że płótno nazwy plików muszą być zgodne z karty domyślne nazwy plików (tych, które są przechowywane w /BIBL./płótno) dokładnie.
Teraz twój projekt powinien być zorganizowany tak:

Krok 14: zrestartowaniem z франкоязычным język
W swoim emulatorze lub urządzeniu, zmień język na jeden z francuskich opcji (francuski (Francja), Francuski (Kanada), francuski (Belgia), francuski (Szwajcaria).)
Uwaga: Dla tych, którzy nie orientuje się w języku francuskim, można powrócić do menu Ustawienia locale z ekranu głównego wybierając: Menu-> Paramètres-> Langue et clavier-> Langue et région.
Ponownie uruchomić jedną minutę aplikację rozmówki i zobaczyć wyniki. Zwróć uwagę, jak odpowiednie francuskie wiersze są ładowane do wszystkich francuski. Należy również zwrócić uwagę, jak danego regionu dyktuje, jakie informacje są wyświetlane w aplikacji.
Na rysunku pokazano, co się dzieje, gdy wybierzesz francuski (Francja).

Krok 15: dokąd iść stąd
Internacjonalizacja siłami rozwiązań projektowych na rozwój zespołu. Na przykład, można zbudować jeden duży projekt dla wszystkich języków, lub będziesz naruszać aplikacji według regionów? Dla niektórych projektów z интернационализацией światło, możesz być w stanie uciec z projektu, wszystkie wielojęzyczne zasoby. Do głębokiego internacjonalizacji, być może trzeba będzie zmienić kolejność projektów, tak, że żadna aplikacja staje się zbyt duży lub uciążliwe dla użytkowników.
Można zauważyć, że w tym wszystkim internacjonalizacja pracy, nigdy nie dotarła do plików źródłowych Java projektu. Ważne jest, aby pamiętać, bo to oznacza, że praca internacjonalizacji aplikacji może spaść nie na autora, który wie, jak korzystać z Eclipse i Android narzędzia, ale dla kogoś, kto potrzebuje szkolenia o tym, jak Android internacjonalizacji działa, jak zasoby mogą być wielopoziomowy, wady i zalety, nad internacjonalizacji (w wyniku czego bardzo duży pakiet plików z dużą ilością grafiki, itp.). Z drugiej strony, to pozostawia twórcy wolny, aby robić to, co robią najlepiej: rozwijać kod.
W końcu, będzie prawdopodobnie zauważyć, że struktura internacjonalizacja Android nie jest idealny, zwłaszcza dla krajów z kilkoma oficjalnymi (i nieformalne) językach. Nie ma sensu zawierać te same grafiki (flaga i mapa) w łazience-RCA i fr-rka przewodników anglo-i francuskojęzycznej kanadyjczycy. Można jednak obejść te ograniczenia dodawania języka i pobieranie plików graficznych sami. Co, zresztą, dla innego podręcznika.
Można znaleźć bardziej szczegółowe wyjaśnienie rozwiązania zasób Android w dokumentacji SDK dla Androida.
Wnioski
W tym samouczku nauczyłeś się tworzyć i wykorzystywać alternatywne pliki zasobów aplikacji na Androida o nazwie minuta rozmówki. Ta aplikacja wyświetla określone ciągi znaków i grafiki na podstawie systemu Android ustawienia regionalne i językowe oraz. Dowiedziałeś się o tym, jak system operacyjny Android pozwala zasobów i wybiera najbardziej odpowiedni zasób jest dostępny w czasie wykonywania. Nauczyłem się także, jak skutecznie zorganizować zasoby do tego, aby zapewnić swoich użytkowników na całym świecie z najlepszym doświadczeniem zastosowania.
Mamy nadzieję, że podoba ci się ta lekcja i czekamy na wasze opinie!
O autorach
Programistów aplikacji mobilnych, Lauren Darcey i Shane кондер były współautorem kilku książek na Androida rozwoju: zaawansowane Programowanie książkę pod tytułem bezprzewodowe aplikacji dla systemu Android i Sams TeachYourself tworzenie aplikacji dla systemu Android za 24 godziny. Kiedy nie piszę, spędzają czas na rozwój oprogramowania mobilnego w ich firmie i świadczenia usług doradczych. Mogą one zostać osiągnięte poprzez e-mail, aby androidwirelessdev+mt@gmail.com na swoim blogu w androidbook.blogspot.com i na Twitterze @androidwireless.