如何将参数传递给AndroidManifest中声明的BroadcastReceiver?

时间:2014-07-11 12:02:30

标签: android broadcastreceiver

我在SMSReceiver声明了AndroidManifest

<receiver android:name="com.example.SMSReceiver"
          android:enabled="false">
    <intent-filter android:priority="999" >
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

默认情况下禁用此功能,并在需要时启用它:

ComponentName component = new ComponentName(context, SMSReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(
        component,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP);

在这种情况下,如何将一些参数传递给SMSReceiver?我目前使用SharedPreferences,但它看起来不太好,因为我不关心活动关闭等。

2 个答案:

答案 0 :(得分:1)

  

在这种情况下,如何将一些参数传递给SMSReceiver?

在摘要中,您发送广播。仅仅因为启用组件并不意味着您实例化组件。

但是,由于清单注册的BroadcastReceivers不会超过onReceive()的结尾,我不知道您认为传递的是什么&#34;某些参数&#34;这样的接收器会完成。

此外,由于在主应用程序线程上调用onReceive(),因此您首先不应在BroadcastReceiver中执行任何重要操作。

答案 1 :(得分:0)

我知道无法通过ComponentName传递参数。


当接收器需要配置时,我要做的是创建一个ReceiverParam单例,并拥有接收器 在执行前阅读:


class SMSReceiverParams {
     private String param1;
     private String param2;

     private static SMSReceiverParams instance;

     public static SMSReceiverParams getInstance() { ... }


    public void setParam1() { .. } 

    public String getParam1() { .. } 

}


现在,从我的app init代码(比如一个Activity) - 执行配置:

SMSReceiverParams.getInstance().setParam1(...);
SMSReceiverParams.getInstance().setParam2(...);


在接收端 - 在onReceive()执行之前读取参数

class SMSReceiver {

         void onReceive() {
                 SMSReceiverParams params = SMSReceiverParams.getInstance(); // <--------
                 // and use them
          }
}