I would like to notify the incoming sms message. I implemented the BroadcastReceiver for SMS receiver. And I also implemented the service for BOOT_COMPLETED action. Because the receiver cannot be registered if the device is reboot. When I launch the apps, that only call onReceiver once. But I reboot the device and start the BOOT_COMPLETED service. That will make the onReceive method call twice. But I don't know why. I confirm I only register the receiver once.
ps: When I reboot the device, I received the log order is enable receiver, register receiver, enable receive, onReceived, onReceived
Here is my code:
 AutoStartService.java
public class AutoStartService extends Service {
    private SmsReceiver smsReceiver;
    public static boolean isStarted = false;
    @Override
    public void onCreate() {
        super.onCreate();
        isStarted = true;
        if(!SmsReceiver.isEnableReceiver && smsReceiver == null) {
            smsReceiver = new SmsReceiver();
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
            registerReceiver(smsReceiver, intentFilter);
            Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
            Log.e("AAA", "register receiver");
        }
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return Service.START_STICKY;
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        isStarted = false;
        Toast.makeText(this, "Service Destroy", Toast.LENGTH_LONG).show();
    }
    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
BootCompleteReceiver.java
public class BootCompleteReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(!AutoStartService.isStarted) {
            new Handler().postDelayed(() -> {
                Intent service = new Intent(context, AutoStartService.class);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    context.startForegroundService(service);
                } else {
                    context.startService(service);
                }
            }, 500);
        }
    }
}
SmsReceiver.java
public class SmsReceiver extends BroadcastReceiver implements SmsHelper.SmsHelperDelegate {
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    public static boolean isEnableReceiver = false;
    public SmsReceiver() {
        super();
        isEnableReceiver = true;
        Log.e("AAA", "enable receiver");
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(SMS_RECEIVED)) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                Log.e("SmsReceiver", "onReceived");
            }
        }
    }
AndroidManifest.xml
<receiver android:name=".receiver.SmsReceiver" android:enabled="true" android:exported="true">
     <intent-filter android:priority="2147483647">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
     </intent-filter>
</receiver>
<service android:name=".receiver.AutoStartService" android:exported="true"/>
<receiver android:name=".receiver.BootCompleteReceiver" android:exported="true">
     <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
</receiver>