onReceive的BroadcastReceiver无法正常工作

时间:2017-07-26 11:59:10

标签: android broadcastreceiver

onReceive of BroadcastReceiver无效。

我正在尝试不同的方式。

这是我目前的代码。

活动代码

BroadcastReceiver _receiver;
public static final String SMS_RECEIVED_ACTION =
        "android.provider.Telephony.SMS_RECEIVED";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    IntentFilter _intentFilter = new IntentFilter(SMS_RECEIVED_ACTION);
    _intentFilter.setPriority(1234567);

    registerReceiver(_receiver,_intentFilter);

    _receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context,"Hello",Toast.LENGTH_LONG).show();
        }
    };


}          

清单文件

<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>

1 个答案:

答案 0 :(得分:1)

在注册之前创建_receiver

_intentFilter.setPriority(999);

_receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"Hello",Toast.LENGTH_LONG).show();
    }
};

registerReceiver(_receiver,_intentFilter);

priority应大于-1000且小于1000

文档

  

机器人:优先   关于处理过滤器描述的类型的意图应该给予父组件的优先级。该属性对活动和广播接收者都有意义:

     

它提供了有关活动如何响应与筛选器匹配的意图的信息,相对于也可以响应意图的其他活动。当具有不同优先级的多个活动可以处理意图时,Android将仅考虑具有较高优先级值的活动作为意图的潜在目标。

     

它控制广播接收器执行接收广播消息的顺序。具有较高优先级值的那些在具有较低值的那些之前被调用。 (该命令仅适用于同步消息;对于异步消息,它会被忽略。)   仅当您确实需要强制接收广播的特定订单时,或者想要强制Android更喜欢一项活动而不是其他活动时,才使用此属性。

     

值必须是整数,例如&#34; 100&#34;。数字越大,优先级越高。默认值为0.该值必须大于-1000且小于1000。