2010-11-02 13 views
8

Chcę zaimplementować bramkę do obsługi połączeń wychodzących.Android 1.6 odpowiednik EXTRA_GATEWAY_URI

W najnowszej wersji systemu Android 2.x mogę to zrobić łatwo z ukrytym ACTION_CALL dodatkowym wyrażenie: „com.android.phone.extra.GATEWAY_URI”

Ale we wcześniejszych wersjach, jak 1,6, I don Nie wiem jak to zrobić. Musi to być możliwe, ponieważ Google Voice to robi. Czy ktoś może mi pomóc?

Dzięki Emmanuel

+0

Zasadniczo chcę mieć możliwość połączenia się z numerem telefonu, ale mam dla użytkownika wyświetlany jest inny numer. Byłoby to przydatne na przykład w przypadku aplikacji na karty telefoniczne. – Emmanuel

+0

Co muszę zrobić, aby uzyskać odpowiedź? – Emmanuel

+0

Nie jest oryginalny kod otwarty gdzieś. Możesz łatwo zeskanować implementację i skopiować potrzebny kod. – CodingBarfield

Odpowiedz

2

Hej Emmanuel, 76% urządzeń z systemem Android 2.x już uruchomić może, że wysiłek zmarnowany. Oczekuje się, że Gingerbread wyjdzie przed końcem roku, co spowoduje spadek odsetka urządzeń o kolejne 1,6. W ciągu mniej niż pół roku system Android w wersji 2.x i nowszej będzie przekraczał 80%. Wystarczy spojrzeć na dystrybucję wersji platformy http://d.android.com/resources/dashboard/platform-versions.html. Może zajrzyj do kodu źródłowego w Android Open Source Project.

Znalazłem napis, o którym wspomniałeś w InCallScreen.java. Może to daje sposób na przekopanie się na starszy kod źródłowy, aby dowiedzieć się, czy możesz uzyskać do niego dostęp za pomocą nieudokumentowanych API. Ale moją sugestią byłoby nie zawracać sobie głowy tymi ostatnimi 25% z 1.6 urządzeń, które znikną szybko.

[Aktualizacja] Ponieważ jest to konieczne, aby to zadziałało, sugerowałbym ponownej kompilacji aplikacji Telefon z repozytorium git i uczynienie go debugowalnym w ten sposób, aby dokładnie zobaczyć, co się dzieje. Prawdopodobnie posiadanie urządzenia ASOP z systemem 1.6 byłoby najlepszym wyjściem, aby wniknąć w sposób, w jaki robi to Android. Zasadniczo musiałbyś przesłać do portu cały kod zaangażowany w tę funkcję w 2.x z powrotem do wersji 1.6. Z perspektywy czasu chciałbym zaproponować aplikację z obsługą 2.x i wydać drugą wersję dostosowaną do wersji 1.6. Opóźnienie wydania tylko z powodu 1.6 wydaje się złym pomysłem na biznes.

+0

W pewnym sensie zgadzam się z tobą, ale jest to wymaganie od mojego pracodawcy i muszę je dostarczyć. Sprawdziłem starszy kod, ale nie wiem, jak to działa. Próbowałem grać z dodatkami bez powodzenia. Zasadniczo chcę mieć możliwość połączenia się z numerem telefonu, ale dla użytkownika wyświetlany jest inny numer. – Emmanuel

+0

Właśnie zaktualizowałem moją odpowiedź. Spójrz. – AGrunewald

+0

Mam nosy pewnie rozumiem. Chcesz, żebym debugował aplikację Phone podczas korzystania z Google Voice? Nie wiem, jak to zrobić ... Najpierw muszę zainstalować Google Voice na emulatorze - nie mam pojęcia, jak to zrobić. Drugi Google Voice nie jest dostępny w Kanadzie. Musiałbym oszukać. – Emmanuel

0

Ten kod korzystający z GATEWAY_URI został definitywnie dodany w Eclair. Patrząc AOSP, w opakowaniach/apps/Telefon/src/com/android/telefon/InCallScreen.java, że ​​bit kodu jest całkowicie inexistant w Donut:

// If a provider is used, extract the info to build the 
    // overlay and route the call. The overlay will be 
    // displayed the first time updateScreen is called. 
    if (PhoneUtils.hasPhoneProviderExtras(intent)) { 
     mProviderLabel = PhoneUtils.getProviderLabel(this, intent); 
     mProviderIcon = PhoneUtils.getProviderIcon(this, intent); 
     mProviderGatewayUri = PhoneUtils.getProviderGatewayUri(intent); 
     mProviderAddress = PhoneUtils.formatProviderUri(mProviderGatewayUri); 
     mProviderOverlayVisible = true; 

     if (TextUtils.isEmpty(mProviderLabel) || null == mProviderIcon || 
      null == mProviderGatewayUri || TextUtils.isEmpty(mProviderAddress)) { 
      clearProvider(); 
     } 
    } else { 
     clearProvider(); 
    } 

nie widzę żadnej alternatywy. Masz szczęście, że możesz pobrać aplikację telefoniczną od Doughnut, dodać to, czego potrzebujesz i wydać ją jako nową aplikację telefoniczną na urządzeniach Doughnut ...

+0

Szukałem również w kodzie źródłowym i zauważyłem, że API brakowało w wersji 1.6 i wcześniejszej. Ale ponieważ Google Voice może to zrobić, musi istnieć jakiś inny interfejs API, którego mogę użyć do uzyskania podobnych wyników. Spojrzałem na statystów, ale nie mogłem nic znaleźć. Uważam za dziwne, że dla ACTION_CALL numer telefonu jest określony zarówno w EXTRA_PHONE_NUMBER, jak iw docelowym identyfikatorze URI, ale wydaje się, że istotny jest tylko numer identyfikacyjny URI. Cokolwiek wstawię w EXTRA_PHONE_NUMBER, wydaje się być ignorowane. A może jest tajna czynność polegająca na nawiązywaniu połączeń Google Voice? – Emmanuel

Powiązane problemy