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_SERVICE
BIND_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
est-il même possible pour une application tierce de remplacer l'application par défaut dans call app?
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
).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.
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