2017-09-26 4 views
12

Meine Anwendung kann keine SMS auf neue Android 8-Update senden. Ich bekomme den Fehler, dass ich keine READ_PHONE_STATE Erlaubnis habe.Android 8 erfordert READ_PHONE_STATE beim Aufruf von SmsManager.sendTextMessage()

java.lang.SecurityException: Neither user 10179 nor current process has android.permission.READ_PHONE_STATE. 
    at android.os.Parcel.readException(Parcel.java:1942) 
    at android.os.Parcel.readException(Parcel.java:1888) 
    at com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:789) 
    at android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:329) 
    at android.telephony.SmsManager.sendTextMessage(SmsManager.java:312) 
    at com.cordova.plugins.sms.Sms.send(Sms.java:192) 
    at com.cordova.plugins.sms.Sms.access$400(Sms.java:22) 
    at com.cordova.plugins.sms.Sms$1.run(Sms.java:102) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 
    at java.lang.Thread.run(Thread.java:764) 

normalerweise ist diese Art von Fehler in Ordnung - ich merke nur, ich brauche eine Erlaubnis und frage danach. Aber in diesem Fall kann ich keine Dokumentation finden, die ich brauche READ_PHONE_STATE, um SmsManager zu verwenden. Weder hier sendTextMessage noch in neuen Android 8 update notes. Letzteres erwähnt, dass Hardware-Seriennummer Ich brauche jetzt READ_PHONE_STATE Erlaubnis.

Weitere Untersuchungen Ich fand, dass viele andere Leute in dieses Problem geraten sind, aber niemand hat irgendwelche Details oder Lösungen, die nicht nur um die Erlaubnis bitten.

So heute habe ich das Problem mit einfachen reinen Anwendung, die nur nach SEND_SMS Erlaubnis fragt und sendet SMS. Und habe genau das gleiche Problem. Es funktioniert auf alles unter Android 8. Aber stürzt mit Erlaubnis Fehler auf Android 8. Hier ist Quellcode, wenn jemand es neu erstellen will.

compileSdkVersion 26 
buildToolsVersion "26.0.2" 
defaultConfig { 
    applicationId "com.example.usr.smstest" 
    minSdkVersion 21 
    targetSdkVersion 26 
} 
package com.example.usr.smstest; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.telephony.SmsManager; 

public class MainActivity extends AppCompatActivity { 

    private static final int MY_PERMISSIONS_REQUEST_SEND_SMS = 1; 

    @Override 
    public void onRequestPermissionsResult(int requestCode, 
              String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        sendSms(); 
       } 
      } 
     } 
    } 

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

     if (ContextCompat.checkSelfPermission(MainActivity.this, 
       Manifest.permission.SEND_SMS) 
       != PackageManager.PERMISSION_GRANTED) { 

       ActivityCompat.requestPermissions(MainActivity.this, 
         new String[]{Manifest.permission.SEND_SMS}, 
         MY_PERMISSIONS_REQUEST_SEND_SMS); 
     }else{ 
      sendSms(); 
     } 
    } 

    private void sendSms(){ 
     SmsManager manager = SmsManager.getDefault(); 
     manager.sendTextMessage("22222222", null, "msg", null, null); 
    } 

} 

es Abgegeben am google issue tracker

+3

Ich wurde in die Android-Quellcode suchen und fanden diese: https://android.googlesource.com/platform/frameworks/ opt/Telefonie/+/987378c0704f6000e8f99a36dd032c99f926b81a/src/java/android/Telefonie/SmsManager.java (Methode: sendTextMessage, Zeile 263) Es gibt einen Aufruf an getSubscriptionId (), die mit READ_PHONE_STATE_PERMISSION geschützt ist, dann führt das Aufrufen dieser Methode zu einem Absturz der SecurityException, wenn für die App diese Berechtigung nicht aktiviert/gewährt ist. Problemumgehung ist (wenn APP die Verwendung von READ_PHONE_STATE deklarierte), die Berechtigung manuell von den Einstellungen zu erteilen. – tnachev

+0

Also anscheinend ist dies in 8.1 Update behoben. Habe noch nicht bestätigt. Noch keine offizielle Antwort von Google – somerandomusername

Antwort

-2
You need to check the permissions in android nougat devices. 

if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) 
     != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       Manifest.permission.SEND_SMS)) { 
      } else { 
       ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.SEND_SMS}, 
        MY_PERMISSIONS_REQUEST_SEND_SMS); 
      } 
     } 

Link - https://www.tutorialspoint.com/android/android_sending_sms.htm 
+0

das ist völlig nebensächlich – somerandomusername

Verwandte Themen