我的项目很简单。它有一个activity
和一个broadcast receiver
。在我的应用程序中,我希望能够发送短信并接收短信。这很有效。
但是现在我想将一些数据从视图传递到接收器。想象一个简单的checkbox
,我想将其值传递给receiver
。
所以这是我的应用程序的基本生命周期:
答案 0 :(得分:1)
BroadcastReceiver
。 BroadcastReceiver
仅在onReceive()
执行时才有效。sendBroadcast(this.service)
代替startService(this.service);
sendBroadcast(this.service)
后,您将收到两个广播(首先来自sendBroadcast()
,第二个来自SmsManager
)。这绝对不是您想要的,因为在第一种情况下,您将能够获得checked
参数而不是SmsMessage
,反之亦然。checked
中存储此SharedPreferences
个参数,然后在onReceive()
答案 1 :(得分:1)
使用自定义意图广播来实现当前流量。在代码中进行更改:
第1步:
在Manifest中将SMS_RECEIVED
注册为自定义意图:
<receiver android:name=".SmsReceiver">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="xx.xxx.xxx.intent.action.SMS_STATUS_ACTION" />
</intent-filter>
</receiver>
第2步:
public class SmsReceiver extends BroadcastReceiver {
public static final String STATUS_INTENT =
"xx.xxx.xxx.intent.action.SMS_STATUS_ACTION";
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
if (arg1.getAction().equals(SmsReceiver.STATUS_INTENT)) {
// get value here sended from Activity
}
else{
// Check for SMS_RECEIVED Action here
}
}
}
第3步:
使用sendBroadcast
public static final String STATUS_INTENT =
"xx.xxx.xxx.intent.action.SMS_STATUS_ACTION";
@Override
public void onClick(View v) {
int checked = 0;
if(this.param.isChecked()){
checked = 1;
}
// put value here
Intent intent = new Intent();
intent.putInt("param", checked);
intent.setAction(CUSTOM_INTENT);
sendBroadcast(intent);
}