[英]How to pass data from SMS broadcast receiver to relevant fragment
如何将数据从SMS广播接收器传递到其相关片段以更新数据。 我创建了一个演示,其中有7个不同的片段,其中有不同的状态通过。 我已经创建了内部广播接收器,但是这不是一个好主意,因为当短信到达时,它会调用所有内部类,因此我想在广播接收器类上创建,然后在接收到短信时我想更新数据,我也想将它们存储在数据库中如果片段当前处于打开状态,则更新其状态,例如将短信状态的更改按钮颜色从“打开”更改为“关闭”。
我把短信广播接收器的onReceive()方法很好地帮助了我。
@Override
public void onReceive(Context context, Intent intent)
{
db = new DataBaseHandler(context);
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (messages[i].getOriginatingAddress().equalsIgnoreCase("+91XXXXXXXXXX"))
systemnumber = true;
}
if (systemnumber)
{
if (messages.length > 0)
{
StringBuffer content = new StringBuffer();
for (SmsMessage sms : messages)
content.append(sms.MessageBody());
mySmsText = content.toString();
}
if(mySmsText.length() == 125)
{
// here i want to pass data from broadcast receiver to it's relevant fragment
}
else if(mySmsText.length() == 231 && mySmsText.replaceAll(" +", " ").split("\\n|\\s")[0].equals("ON"))
{
// here i want to pass data from broadcast receiver to it's relevant fragment
} }
} else
}
}
最后我做到了……//这是主要的广播接收器类
public void onReceive(Context context, Intent intent)
{
db = new DataBaseHandler(context);
Bundle bundle = intent.getExtras();
if (bundle != null)
{
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
{
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (messages[i].getOriginatingAddress().equalsIgnoreCase("+XXXXXXXXXXXX"))
systemnumber = true;
}
if (systemnumber)
{
if (messages.length > 0)
{
StringBuffer content = new StringBuffer();
for (SmsMessage sms : messages)
content.append(sms.getMessageBody());
mySmsText = content.toString();
Log.d("My-sms-text", "" + mySmsText);
}
Log.d("My-sms-length", "" + mySmsText.length());
if(mySmsText.equalsIgnoreCase("ABC"))
{
Intent i = new Intent("broadCastOne");
// Data you need to pass to activity
db.update_sys_pwd(mySmsText);
i.putExtra("message", mySmsText);
context.sendBroadcast(i);
Log.d("Call demo1","Demo1");
}
else if(mySmsText.equalsIgnoreCase("DEF"))
{
Bundle extras = intent.getExtras();
Intent i = new Intent("broadCastTwo");
// Data you need to pass to activity
db.update_sys_pwd(mySmsText);
i.putExtra("message", mySmsText);
context.sendBroadcast(i);
Log.d("Call demo2","Demo2");
}
}
}
}
//要注册内部活动,我会执行以下操作
registerReceiver(broadcastReceiver, new IntentFilter("broadCastOne"));
//now i create broadcast receiver inside class
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent)
{
Bundle b = intent.getExtras();
Log.d("Inside Demo1","Demo1");
final String message = b.getString("message");
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
updateUi(message);
Log.d("inside demoActivity","Inside runnable");
}
});
Log.d("newmesage", "" + message);
}
};
//如果当前活动处于打开状态,则下面的方法用于更新UI,否则将其存储在数据库中。
public void updateUi(String message)
{
db.update_sys_pwd(message);
t1.setText(message);
Log.d("Inside Demo1","Update UI");
}
如果有任何错误,请告诉我,以便我更好地更新它...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.