Mon application ne peut pas envoyer de sms sur la nouvelle mise à jour Android 8. J'obtiens une erreur que je n'ai pas READ_PHONE_STATE autorisation.
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)
généralement ce genre d'erreur est très bien - je réalise juste que j'ai besoin d'une autorisation et je la demande. Mais dans ce cas, je ne trouve aucune documentation dont j'ai besoin READ_PHONE_STATE pour utiliser SmsManager. Ni ici sendTextMessage ni dans le nouveau Android 8 notes de mise à jour . Ce dernier mentionne que pour obtenir le numéro de série du matériel J'ai maintenant besoin de l'autorisation READ_PHONE_STATE .
En recherchant plus loin, j'ai constaté que de nombreuses autres personnes ont rencontré ce problème, mais personne n'a de détails ou de solutions au-delà de la simple demande de ladite autorisation.
Donc, aujourd'hui, j'ai recréé le problème avec une application pure et simple qui demande simplement l'autorisation SEND_SMS et envoie des sms. Et j'ai exactement le même problème. Il fonctionne sur tout ce qui suit Android 8. Mais se bloque avec une erreur d'autorisation sur Android 8. Voici le code source si quelqu'un veut le recréer).
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);
}
}
Soumis le google issue tracker
Ceci est un bug dans Android O tellement ennuyeux. Si vous cochez SmsManager.Java vous pouvez voir la méthode getSubscriptionId
dont le corps a besoin READ_PHONE_STATE_PERMISSION
et si vous ne donnez pas READ_PHONE_STATE
lancer SecurityException
Tout ce que vous pouvez faire est donc de générer READ_PHONE_STATE
et expliquez-le au Play Store si vous avez été averti ou attendez que les développeurs de Google le corrigent