2017-12-06 6 views
0

Oreo(API 26)より前のバージョンではうまく動作しますが、API 26では無視されるSMSリスナーがあります。ドキュメントによれば、SMS_RECEIVED_ACTIONは暗黙のブロードキャストの制限(link)から免除されています。変更は必要ありません。私はマニフェストにこれを持ってOreoのSMS BroadcastReceiver

public class SmsListener extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     (...) 
    } 
} 

<receiver android:name=".communication.SmsListener" 
    android:permission="android.permission.BROADCAST_SMS"> 
    <intent-filter android:priority="1000"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
    </intent-filter> 
</receiver> 

thisなどの異なるサンプルプロジェクトを試してみまし権限

<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
<uses-permission android:name="android.permission.READ_SMS"/> 

を設定ここで

は私のリスナーです同様に、結果は同じであり、SMSはAPI26に取り込まれない。

誰かが私に実用的なサンプルを提供することができますか、何かを変更する必要があるか、API 26にバグがあるかどうかを知る手助けがありますか?

+0

デバイス、またはエミュレータでこれをテストしていますか?私は試したエミュレータのどれでもこれを再現することはできません。 –

+0

エミュレータとデバイスの両方で試しました。サンプルプロジェクトを私に送ることができますか? –

+0

それは何も特別です。新しいプロジェクト、マニフェスト ''と ''要素を追加し、 'MainActivity'に' requestPermissions() 'を追加し、Receiverクラスを作成し、' Toast'を追加します。私はReceiverを動的に登録することもテストしました。別のユーザーが以前にOreoで失敗したと主張する質問を投稿したためです。私はそれが動作しないようにすることはできません、以前のバージョンで働いていた場合、あなたが失敗している理由を本当に考えることができません。 –

答えて

0

ちょうど何が起こったのか分かりました。 The android:priority="1000"が原因で問題が発生します。 ドキュメントでこれが見つかりました:

値は100などの整数である必要があります。数値が高いほど優先度が高くなります。デフォルト値は、値が-1000と

1000未満よりも大きくなければなりません0です。出典:link

+0

これは答えではありません。私はandroid:priority = "999"を設定しました。 BroadcastReceiver SMSレシーバーは、アプリケーションがフォアグラウンドで実行されているときにトリガーされます。しかし、アプリがバックグラウンドになるか、電話画面がオフ状態になるときには起動しません。 – Plugie

0

manifest.xmlだけでアクセス権を提供するだけでは不十分で、実行許可要求のコードを追加する必要がありました。

あなたMainActiviyにこのコードを追加します。

ActivityCompat.requestPermissions(this, 
      new String[]{Manifest.permission.RECEIVE_SMS}, 
      MY_PERMISSIONS_REQUEST_SMS_RECEIVE); 

MainActivityクラスのトップでこれを定義します。また、

private int MY_PERMISSIONS_REQUEST_SMS_RECEIVE = 10; 

そして、このオーバーライドを追加します。

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if (requestCode == MY_PERMISSIONS_REQUEST_SMS_RECEIVE) { 
     // YES!! 
     Log.i("TAG", "MY_PERMISSIONS_REQUEST_SMS_RECEIVE --> YES"); 
    } 
} 

Android documentation for runtime permissions

を参照してください。

BroadcastReceiver SMS_Received not working on new devicesBroadcast Receivers not working in Android 6.0 Marshmallow

+0

これはAPI 23で導入された変更に関連しています。私はすでに正しく処理しています(実行時のアクセス許可を要求しています)。 私が抱えている問題は、放送受信機の制限に関するAPI26の新しい変更に関連しています。 –

関連する問題