似乎无法动态注册 Broadcastreceiver

Can't seem to register Broadcastreceiver dynamically

我是 android 的新手,我一直在尝试动态注册我的 Broadcastreceiver 以便我可以接收 smss ,但我似乎无法让它工作,这是我的代码:

public class MainActivity extends AppCompatActivity {

BroadcastReceiver receiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });

    receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(getApplicationContext(), "Hellllo", Toast.LENGTH_SHORT).show();
        }
    };
    IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
    registerReceiver(receiver,filter);
}

"hello" Toast 不会弹出所以我假设接收器没有注册

我把这个权限放在我的清单中:

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

我错过了什么?

我们在评论中确定 SMS_RECEIVED 广播被另一个应用拦截和中止。这在 KitKat (API 19) 之前的 Android 中是可能的,但在以后的版本中是不可能的。

解决方案是使用 IntentFilter#setPriority() 方法将 IntentFilter 实例的优先级设置为 999

但是请注意,其他应用程序仍然有可能在您的应用程序收到广播之前中止广播。尽管文档说具有相同优先级的 IntentFilters 的接收器将以任意顺序传送广播,但通常会发现它们是按照应用程序安装的顺序传送的。此外,某些应用程序(例如系统应用程序、预装应用程序等)的优先级可能高于 999,这是您应用程序的最大实用价值。