我在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
,但它看起来不太好,因为我不关心活动关闭等。
答案 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
}
}