Warum benötigt sendTextMessage die Berechtigung READ_PHONE_STATE?

9

Meine App hat diesen Stack-Trace nach Hause geschickt, was so aussieht, als ob unter der Haube etwas sehr Falsches vor sich geht.

phone_model = SKY IM-A630K, android_version = 2.1-update1

%Vor%

Also sollte ich alle Ausnahmen von sendTextMessage erfassen? Wer ist schuld daran?

    
ubershmekel 04.01.2011, 23:17
quelle

3 Antworten

2
  

Meine App hat diesen Stack-Trace nach Hause geschickt, was so aussieht, als ob unter der Haube etwas sehr Falsches vor sich geht.

Wie Sie das sagen, nehme ich an, dass dies das erste Mal ist, dass Sie dieses Problem gesehen haben und es auf anderen Telefonen nicht passiert.

Ist es möglich, dass der SmsManager in der Android-Implementierung auf diesem Telefonmodell versucht, den Status des Telefons zu überprüfen, bevor er versucht, eine SMS zu senden. Das ist reine Vermutung, aber es scheint keine unvernünftige Sache zu sein, obwohl die Telefonie-API-Dokumentation für SMS Manager es nicht erwähnt. Vielleicht nicht, ich bin mir nicht sicher.

Da das Senden einer SMS-Nachricht in Ihrer App sehr wichtig ist, sollten Sie sicherlich alles tun, um mögliche Ausnahmen zu finden, die möglicherweise mit dem Senden der Nachrichten zusammenhängen (und möglichst aus dem Ausnahmezustand wiederherstellen).

Wie es scheint, dass dieses spezielle Problem nicht von, aus dem behoben werden kann, erklären Sie Gebrauch-Erlaubnis für READ_PHONE_STATE in Ihr Manifest?

    
Squonk 04.01.2011, 23:59
quelle
7

Ich sehe jetzt, dass in Lollipop (API 21), sogar mit einer benignen Funktion wie SmsManager.getDefault().divideMessage(String) - die READ_PHONE_STATE Berechtigung benötigt. Ich bin mir sicher, dass dies zuvor nicht erforderlich war und dass es sich um ein Betriebssystemproblem handelt, da ich es zuvor auf Nexus 5-Geräten und nach dem Upgrade auf Lollipop getestet habe. Vor dem Ausführen von KitKat funktionierte SMS problemlos ohne die Berechtigung READ_PHONE_STATE . Und danach war es erforderlich.

Der Grund ist, dass Telefoniefunktionen versuchen, vernünftige Entscheidungen über alles zu treffen. Eine einfache Aufgabe wie das Aufteilen einer SMS (nicht einmal das Senden) läuft also bis zum SmsManager ab, um sie über den Telefonstatus abzufragen.

Ich denke, es ist ein Designfehler. Und wie Sie oben sagten, kann und sollte es Benutzer erschrecken. Warum haben sie auf Android so viele mehrdeutige Berechtigungen?

Das ist mein Stack-Trace, nur zum Spaß:

%Vor%     
Shoham 04.12.2014 17:43
quelle
0

Ich hatte das gleiche Problem mit einem HTC-Handy (Desire 728G) Dual Sim und ich musste "READ_PHONE_STATE" einschließen, aber jetzt fragt Google nach einer Datenschutzrichtlinie, und weil ich zu faul bin mach es :) Ich habe etwas recherchiert und ich habe einen besseren Weg gefunden, ohne "READ_PHONE_STATE" zu benutzen. Das Problem ist, dass einige Geräte (hauptsächlich Dual-SIM) die Berechtigung "READ_PHONE_STATE" benötigen, um nach dem Standard "SubscriptionId" zu suchen, was beim Aufruf von "SmsManager.getDefault ()" passiert. Unten ist der Code, den ich verwende, um dieses Problem zu vermeiden, indem ich SubscriptionId den Wert (1) zuweise, wenn irgendeine Ausnahme auftrat:

%Vor%     
Galeb Nassri 25.02.2017 00:20
quelle

Tags und Links