Android incomingNumber bein Eingehenden Anruf immer leerer String

rs77n

Mitglied
Hallo,
ich versuche gerade bei einem eingehenden Anruf die Nummer aus zu werten.
In das Manifest habe ich dir richtigen Rechte eingetragen.
XML:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Mein Code sieht so aus:
Java:
private TelephonyManager telephonyManager = null;
    private PhoneStateListener phoneStateListener = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Generiere Widgets
        this.txtOutput = (EditText)findViewById(R.id.txtOutput);

        //Telefonobjekte
        this.telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);

        //Generierung des PhoneStateListeners
        this.phoneStateListener = new PhoneStateListener()
        {
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                //Dekl. und Init
                String strCallStateAndNr = "\nNummer:\t" + incomingNumber + "\nStatus:\t";

                switch (state) {
                    case TelephonyManager.CALL_STATE_RINGING:
                        strCallStateAndNr +="Einkommendr Anruf";
                        break;

                    case TelephonyManager.CALL_STATE_OFFHOOK:
                        strCallStateAndNr +="Anruf angenommen";
                        break;

                    case TelephonyManager.CALL_STATE_IDLE:
                        strCallStateAndNr += "Aufgelegt / Standardzustand";
                        break;

                }

                //Ausgabe
                txtOutput.setText(txtOutput.getText().toString() + " " + strCallStateAndNr);
            }
        };

        telephonyManager.listen(phoneStateListener,PhoneStateListener.LISTEN_CALL_STATE);
    }
Aber in der onCallStateChanged ist der String incomingNumber immer ein leerere String. Alle Informationen die im Netz gefunden habe sagen das die Rechte fehlen. Die sind aber gesetzt. Hat jemand eine Idee?

VG
Rene
 

rs77n

Mitglied
Ich habe nur zumindest rausgefunden das mein Code mit API22 funktioniert und die Anrufernummer angezeigt wird. D.h. für API23 fehlen mir bestimmte Rechte. Jemand eine Idee welche?
 

JCODA

Top Contributor
Ich hab' wenig Ahnung von Android, aber hier: http://stackoverflow.com/questions/...his-code-work-on-android-6-marshmallow-api-23
scheint etwas zu stehen, dass dir helfen könnte.
If you still want to target API 23 then you have to use the new runtime permission API to request permission usage first, otherwise it will simply be denied.

https://developer.android.com/training/permissions/requesting.html

  • If the device is running Android 6.0 or higher, and your app's target SDK is 23 or higher: The app has to list the permissions in the manifest, and it must request each dangerous permission it needs while the app is running. The user can grant or deny each permission, and the app can continue to run with limited capabilities even if the user denies a permission request.
 

rs77n

Mitglied
Das hatte ich bereits gefunden. Aber so wie es aussieht muss ich mir mal die neue permission API von 23 anschauen.
Danke trotzdem.
 

Sweepy86

Neues Mitglied
Auch wenn es schon eine gute Weile her ist, das die Frage gestellt worden ist.
Die READ_PHONE_STATE Permisson ist korrekt. Es liegt an der Rechteeinstellung von Android 6.
Die Rechte für die READ_PHONE_STATE Permission werden wohl standardmäßig erst einmal verweigert.
Wenn man in den "App-Infos" der entsprechenden App die "Berrechtungen" aufruft, kann man dort die Telefonberechtung auswählen. Dann funktioniert die Methode onCallStateChanged wie gewünscht.
 

Oben