アプリケーションが新しいAndroid 8アップデートでSMSを送信できません。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)
通常、この種のエラーは問題ありません-許可が必要であることを理解し、それを要求します。しかし、この場合、SmsManagerを使用するために必要なドキュメントREAD_PHONE_STATEが見つかりません。ここでは sendTextMessage も新しいAndroid 8 pdate notes 。でもありません。後者はhardware serialを取得することについて言及しています) number私はREAD_PHONE_STATE権限が必要になりました。
さらに調査したところ、他の多くの人がこの問題に遭遇したことがわかりましたが、上記の許可を求める以上の詳細や解決策はありません。
そこで、今日はSEND_SMS権限を要求してSMSを送信するだけの単純な純粋なアプリケーションで問題を再現しました。まったく同じ問題が発生しました。 Android 8.以下のすべてで機能しますが、Android 8.で権限エラーが発生してクラッシュします。これを再作成したい場合のソースコードを次に示します。
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);
}
}
google issue tracker に送信しました
これはAndroid Oのバグです。非常に煩わしいものです。チェックすると SmsManager.Java 必要なgetSubscriptionId
メソッドが表示されますREAD_PHONE_STATE_PERMISSION
と指定しない場合はREAD_PHONE_STATE
スローSecurityException
だからあなたができることはREAD_PHONE_STATE
Googleデベロッパーから警告を受けた場合や修正を待つ場合は、Playストアに説明してください