Pourquoi ne pas ce code de travail sur android 6 guimauve Api 23?
Pourquoi ne pas ce code de travail sur android 6 guimauve Api 23? Il ne jette pas une Exception, mais le code à l'intérieur callStateListener ne fonctionne pas.
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener callStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
//if(logAtive) Log.i(LOG_TAG,incomingNumber + " " + state);
if(state==TelephonyManager.CALL_STATE_RINGING){
Toast.makeText(getApplicationContext(),"Hey, receive your call. Phone is ringing.",
Toast.LENGTH_LONG).show();
}
if(state==TelephonyManager.CALL_STATE_OFFHOOK){
Toast.makeText(getApplicationContext(),"You are in a call. ",
Toast.LENGTH_LONG).show();
}
if(state==TelephonyManager.CALL_STATE_IDLE){
Toast.makeText(getApplicationContext(),"You are in idle state… ",
Toast.LENGTH_LONG).show();
}
}
};
telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);
Autorisations:
<uses-feature android:name="android.hardware.telephony" android:required="true" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
Il fonctionne parfaitement sur Android 5.1.1 mais pas dans 6 API (Niveau 23)
peut-être en raison du nouveau modèle d'autorisation de
Ce code ne fait rien. Vous créez un
Android n'est pas android.la permission.PROCESS_INCOMING_CALLS autorisation maintenant, il l'habitude d'être là plus tôt, vérifiez les autorisations
Ce code ne fait rien. Vous créez un
PhoneStateListener
et puis ne pas faire quelque chose avec elle.Android n'est pas android.la permission.PROCESS_INCOMING_CALLS autorisation maintenant, il l'habitude d'être là plus tôt, vérifiez les autorisations
OriginalL'auteur mauriciosouza | 2015-09-28
Vous devez vous connecter pour publier un commentaire.
Je viens de tomber sur cela et compris. C'est parce que vous êtes en ciblant android SDK 23. Si vous modifiez votre fichier manifeste pour cible API 22 puis il va commencer à travailler même s'il est installé et en cours d'exécution sur une Guimauve à l'appareil.
Si vous voulez toujours la cible API 23 alors vous devez utiliser la nouvelle API d'autorisation d'exécution pour demander la permission d'utilisation de la première, sinon il sera tout simplement refusé.
https://developer.android.com/training/permissions/requesting.html
Meilleure réponse, merci
OriginalL'auteur TonyB
Vous peuvent ne pas avoir toutes les autorisations pour accéder à la
TelephonyManager
(par exempleREAD_PHONE_STATE
).Selon la la documentation, quand vous n'avez pas demandé ou n'ont pas obtenu la permission, mais sont encore en train d'essayer d'y accéder, le résultat sera vide, plutôt qu'une exception, comme dans le passé:
Vous devez demander à l'utilisateur d'accorder l'autorisation appropriée, et de traiter les cas où l'utilisateur a déjà refusé ou a révoqué l'autorisation etc. Il y a une description détaillée de la façon d'employer cette ici.
OriginalL'auteur Ronnie
J'ai observé le même comportement. Notre application fonctionne parfaitement bien sur Lollipop et vers le bas, mais pas sur de la Guimauve. Il n'a rien à voir avec les autorisations. En fait avec l'appli de test que j'ai écrit, je suis allé dans les Paramètres et a donné les autorisations à l'avance. Le problème dans notre application a été avec un numéro de téléphone lui-même, qui venait de source externe. Si Android pense qu'il n'est pas valide, vous n'aurez pas
onCallStateChanged
appelé à la Guimauve. Il suffit d'utiliser un faux numéro1234567890,,2#
("non valide") vs1234567890
("valide") pour la valider. Je ne sais pas comment "réparer" le nombre encore, dans le cadre des nombres avec des extensions de travail.Edit: rapport de bug que j'ai ouvert au 16 Déc. 15
OriginalL'auteur igorepst
S'il vous plaît, postez votre AndroidManifest, ainsi que vérifiez les points suivants documeetation:
OriginalL'auteur Bonatti