当我在奥利奥收到otp时,SmsBroadcastReceiver没有触发 . 我已经明确地在片段中注册了我的接收器,而不仅仅是在manifest中 .

public class MyFragment extends Fragment{
   @Override
   public View onCreateView(LayoutInflater inflater,
      ViewGroup container, Bundle savedInstanceState) {
      intentFilter = new IntentFilter();
      intentFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
      smsBroadcastReceiver = new SmsBroadcastReceiver();
     getActivity().registerReceiver(smsBroadcastReceiver,intentFilter); 
      return inflater.inflate(
              R.layout.fragment_two, container, false);
   }
}

这是我的SmsReceiverBroadcast类

public class SmsBroadcastReceiver extends BroadcastReceiver {
    public SmsBroadcastReceiver() {
    }
    @Override
    public void onReceive(Context context, Intent intent) {
               Log.d("onRecieve","Otp has been received");
            }
        } catch (Exception e) {
        }
    }

}

在我的清单中,

<receiver
                android:name=".receiver.SmsBroadcastReceiver"
                android:enabled="true"
                android:exported="false"
                >
                <intent-filter>
                    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </receiver>

我没有在广播接收器的覆盖onReceive()方法中获得任何触发器 . 我发现我们需要明确注册广播接收器 . 我使用registerBroadcast()注册我的接收器 . 它对我不起作用 . 另外,我提到https://developer.android.com/about/versions/oreo/background.html

我也尝试过每当我收到otp时,我是否需要添加任何其他权限来注册和触发接收器?我的意图过滤动作( Telephony.Sms.Intents.SMS_RECIEVED_ACTION )是否正确?