Remplacer l'application in call

Background

j'essaie de développer une application d'appel vraiment simple pour remplacer la version stock. En gros, je veux juste répondre aux appels entrants et présenter à l'utilisateur une interface utilisateur personnalisée très simple. Il n'y a pas besoin d'appels sortants ou d'autres choses de fantaisie.

Recherche sur le web j'ai trouvé paquet android.telecom.incallservice (disponible en API 23). ce service est mis en œuvre par toute application qui souhaite fournir l'interface utilisateur pour la gestion du téléphone appeler.

cela semble prometteur, mais j'ai du mal à le faire fonctionner. J'ai créé un simple service d'extension du service D'appel et je l'ai déclaré dans mon manifeste tel que décrit par les docs. Cependant, je m'attendrais à être en mesure de changer l'application de téléphone par défaut dans les paramètres à mon propre, mais je ne peux trouver l'application de téléphone stock.

Code

Ceci est la déclaration du Manifeste du docs. J'ai remplacé BIND_IN_CALL_SERVICEBIND_INCALL_SERVICE puisque je suppose que c'est un typographique.

<service android:name="your.package.YourInCallServiceImplementation" android:permission="android.permission.BIND_INCALL_SERVICE">
    <meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
    <intent-filter>
        <action android:name="android.telecom.InCallService"/>
    </intent-filter>
</service>

Questions

  1. est-il même possible pour une application tierce de remplacer l'application par défaut dans call app?

  2. y a-t-il des exemples d'implémentations utilisant cette API là-bas que je peux utiliser comme référence? J'ai trouvé l' google de mise en œuvre, mais c'est une application système qui utilise certaines permissions qui ne sont pas disponibles pour d'autres applications (ex: android.permission.MODIFY_PHONE_STATE).

  3. ai-je raison dans l'hypothèse qu'après une correcte InCallService l'enregistrement du manifeste et une implémentation du talon je pourrais m'attendre à trouver mon application sous <!--6? Dois-je déclarer quelque chose d'autre?

Merci.

24
demandé sur Shashank Agrawal 2016-01-18 21:48:16

1 réponses

Selon docs et comme vous commentez vous-même, vous devez ajouter dans votre manifeste:

<service android:name="your.package.YourInCallServiceImplementation"
          android:permission="android.permission.BIND_INCALL_SERVICE">
      <meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
      <intent-filter>
          <action android:name="android.telecom.InCallService"/>
      </intent-filter>
 </service>

android:name doit être remplacé par la classe qui implémente ce service.


 <activity android:name="your.package.YourDialerActivity">
      <intent-filter>
           <action android:name="android.intent.action.DIAL" />
           <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
 </activity>

android:name doit être remplacé par la classe qui implémente l'activité principale pour votre propre implémentation du composeur.

Ici vous pouvez trouver plus d'informations sur ce: https://developer.android.com/guide/topics/connectivity/telecom/selfManaged

Et voici un exemple de projet que vous pouvez utiliser comme un guide: https://github.com/arekolek/simple-phone

Et ça: https://stackoverflow.com/a/49835987/1916449

0
répondu Oscar Caballero Pozas 2018-07-19 07:20:50