私のアプリケーションは新しいAndroid 8アップデートでSMSを送信できません。 私には、READ_PHONE_STATEの権限がないというエラーが表示されます。Android 8はSmsManager.sendTextMessage()を呼び出すときに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でもありません。update notes後者は、 を入手してハードウェアのシリアル番号を取得することを言及しました。READ_PHONE_STATEの許可が必要です。
さらに詳しく調べると、他の多くの人がこの問題に遭遇していることがわかりましたが、誰もその許可を求めること以外の詳細や解決策はありません。
今日は、SEND_SMS権限を求めてSMSを送信する単純な純粋なアプリケーションでこの問題を再現しました。そしてまったく同じ問題を抱えています。それはAndroid 8の下のすべてで動作します。しかし、アンドロイド8のパーミッションエラーでクラッシュします。誰かが再作成したい場合、ソースコードがあります。 https://android.googlesource.com/platform/frameworks/:私はAndroidのソースコードに見て、これを見つけたgoogle issue tracker
上でそれを提出
(メソッド:sendTextMessage、行263) getSubscriptionId()メソッドの呼び出しがあります。 )がREAD_PHONE_STATE_PERMISSIONで保護されている場合、このアクセス権がチェック/付与されていない場合、このメソッドを呼び出すとSecurityExceptionが発生し、アプリケーションがクラッシュします。 回避策(READ_PHONE_STATEのアプリケーションで宣言された使用)は、設定からアクセス許可を手動で付与することです。 – tnachev
明らかに、これは8.1のアップデートで修正されています。まだ確認していない。 Googleの – somerandomusername