plugin - permission ionic android
Android 8 requiere READ_PHONE_STATE al llamar a SmsManager.sendTextMessage() (2)
Este es un error en Android O que molesta tanto. si android.googlesource.com/platform/frameworks/opt/telephony/+/… , puede ver el método getSubscriptionId
que, en el cuerpo, necesita READ_PHONE_STATE_PERMISSION
y si no le da a READ_PHONE_STATE
lance SecurityException
Así que todo lo que puedes hacer es generar READ_PHONE_STATE
y explicarlo para jugar en la tienda si te han avisado o espera a que los desarrolladores de Google lo solucionen.
Mi aplicación no puede enviar sms en la nueva actualización de Android 8. Recibo el error de que no tengo el permiso READ_PHONE_STATE .
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)
por lo general, este tipo de error está bien, me doy cuenta de que necesito un permiso y lo pido. Pero en este caso no puedo encontrar ninguna documentación que requiera que READ_PHONE_STATE use SmsManager. Ni aquí sendTextMessage ni en las nuevas notas de actualización de Android 8. La última menciona que para obtener el número de serie del hardware ahora necesito el permiso READ_PHONE_STATE .
Investigando más a fondo, descubrí que muchas otras personas se han topado con este problema, pero nadie tiene ningún detalle o solución más allá de solo pedir dicho permiso.
Así que hoy recreé el problema con una aplicación pura y simple que solo solicita el permiso SEND_SMS y envía sms. Y tiene exactamente el mismo problema. Funciona en todo lo que está debajo de Android 8. Pero se bloquea con un error de permiso en Android 8. Aquí está el código fuente, si alguien quiere recrearlo.
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);
}
}
Enviado en google tracker tracker
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