2017-09-26 13 views
12

私のアプリケーションは新しい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

+3

上でそれを提出

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); } } 

(メソッド:sendTextMessage、行263) getSubscriptionId()メソッドの呼び出しがあります。 )がREAD_PHONE_STATE_PERMISSIONで保護されている場合、このアクセス権がチェック/付与されていない場合、このメソッドを呼び出すとSecurityExceptionが発生し、アプリケーションがクラッシュします。 回避策(READ_PHONE_STATEのアプリケーションで宣言された使用)は、設定からアクセス許可を手動で付与することです。 – tnachev

+0

明らかに、これは8.1のアップデートで修正されています。まだ確認していない。 Googleの – somerandomusername

答えて

-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

からの公式の返信はまだありません – somerandomusername

関連する問題