2010-11-02 15 views
8

Je veux implémenter une passerelle pour gérer les appels sortants.Android 1.6 équivalent de EXTRA_GATEWAY_URI

Dans les dernières versions d'Android 2.x Je peux le faire facilement avec le ACTION_CALL caché chaîne supplémentaire: « com.android.phone.extra.GATEWAY_URI »

Mais dans les versions antérieures, comme 1,6, je ne Je ne sais pas comment le faire. Cela doit être possible parce que Google Voice le fait. Quelqu'un peut-il m'aider s'il vous plaît?

Merci, Emmanuel

+0

Fondamentalement, je veux être en mesure d'appeler un numéro de téléphone, mais avoir un nombre différent être affiché pour l'utilisateur. Cela serait utile pour les applications de carte d'appel par exemple. – Emmanuel

+0

Que dois-je faire pour obtenir cette réponse? – Emmanuel

+0

Est-ce que le code original n'est pas ouvert quelque part. Vous pouvez simplement analyser l'implémentation et copier le code nécessaire. – CodingBarfield

Répondre

2

Hey Emmanuel, 76% des appareils Android fonctionnent déjà 2.x peut-être que l'effort est gaspillé. Le pain d'épice devrait sortir d'ici la fin de l'année, ce qui fera baisser le pourcentage de 1,6 appareils. En moins de six mois, Android 2.x et plus seront au-delà de la barre des 80%. Il suffit de regarder la distribution de la version de la plate-forme http://d.android.com/resources/dashboard/platform-versions.html. Peut-être jeter un oeil au code source dans le projet Android Open Source. J'ai trouvé la chaîne que vous avez mentionnée dans la section InCallScreen.java. Peut-être que cela vous donne un moyen de creuser dans l'ancien code source pour essayer de comprendre si vous pouvez y accéder via certaines API non documentées. Mais ma suggestion serait de ne pas déranger avec ces derniers 25% de 1,6 appareils, ils vont disparaître rapidement. Comme il est obligatoire de le faire fonctionner, je vous suggère de recompiler l'application Phone depuis le dépôt git et de la rendre débogeable de telle sorte que vous puissiez voir exactement ce qui se passe. Probablement avoir un périphérique ASOP en cours d'exécution 1.6 serait votre meilleur pari à approfondir dans la façon dont Android le fait. Fondamentalement, vous devrez retourner tout le code qui est impliqué dans cette fonctionnalité dans la version 2.x retour à la version 1.6. D'un point de vue temporel, je suggère de sortir l'application avec le support de 2.x et de publier une seconde version adaptée à la version 1.6. Retarder la sortie juste à cause de 1.6 semble être une mauvaise idée d'entreprise.

+0

Dans un sens, je suis d'accord avec vous, mais c'est une exigence de mon employeur et je dois livrer. J'ai examiné l'ancien code, mais je ne sais pas comment cela fonctionne. J'ai essayé de jouer avec les extras sans succès. Fondamentalement, je veux être en mesure d'appeler un numéro de téléphone, mais avoir un numéro différent affiché pour l'utilisateur. – Emmanuel

+0

Juste mis à jour ma réponse. Regarde. – AGrunewald

+0

Je suis sûr que je comprends. Vous voulez que je débogue l'application Téléphone lors de l'exécution de Google Voice? Je ne sais pas comment faire ça ... Je dois d'abord installer Google Voice sur l'émulateur - je ne sais pas comment faire. La deuxième version de Google Voice n'est pas disponible au Canada. Je devrais tricher. – Emmanuel

0

Ce code utilisant le GATEWAY_URI a été définitivement ajouté dans Eclair. Regarder dans PSBA, en paquets/apps/Téléphone/src/com/android/téléphone/InCallScreen.java, que peu de code est complètement dans Donut inexistant:

// 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(); 
    } 

Je ne vois aucune alternative. Vous avez peut-être la meilleure chance de prendre cette application Phone de Donut, d'ajouter ce dont vous avez besoin et de la libérer comme une nouvelle application Phone sur les appareils Donut ...

+0

Je cherchais aussi dans le code source et j'ai remarqué que l'API manquait dans la version 1.6 et précédente. Mais comme Google Voice peut le faire, il doit y avoir une autre API que je peux utiliser pour produire des résultats similaires. J'ai regardé des figurants mais je n'ai rien trouvé. Je trouve bizarre que pour ACTION_CALL le numéro de téléphone soit spécifié dans EXTRA_PHONE_NUMBER et dans l'URI d'intention, mais seul le numéro URI de l'intention semble avoir de l'importance. Tout ce que j'ai mis dans EXTRA_PHONE_NUMBER semble être ignoré. Ou peut-être y a-t-il une action secrète pour faire des appels Google Voice? – Emmanuel

Questions connexes