[英]How to pass data from SMS broadcast receiver to relevant fragment
How can i pass data from SMS broadcast receiver to it's relevant fragment to update data . 如何将数据从SMS广播接收器传递到其相关片段以更新数据。 i had created one demo in which i had 7 different fragments in which there are different kinds of status are pass. 我创建了一个演示,其中有7个不同的片段,其中有不同的状态通过。 i had created inner broadcast receiver but it is not good idea because when sms is arrived it call all inner classes so i want to create on broadcast receiver class and then on sms received i want to update data i also want to store them in data base and if fragment is currently open then update status on it like change button color on sms status change from ON to OFF. 我已经创建了内部广播接收器,但是这不是一个好主意,因为当短信到达时,它会调用所有内部类,因此我想在广播接收器类上创建,然后在接收到短信时我想更新数据,我也想将它们存储在数据库中如果片段当前处于打开状态,则更新其状态,例如将短信状态的更改按钮颜色从“打开”更改为“关闭”。
i had put onReceive() method of sms broadcast receiver kindly help me. 我把短信广播接收器的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
}
}
Finally i done it... // this is main broadcast receiver class 最后我做到了……//这是主要的广播接收器类
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");
}
}
}
}
// to register inside activity i do something like below //要注册内部活动,我会执行以下操作
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);
}
};
// below method is used for update UI if currently activity open otherwise it store them inside database . //如果当前活动处于打开状态,则下面的方法用于更新UI,否则将其存储在数据库中。
public void updateUi(String message)
{
db.update_sys_pwd(message);
t1.setText(message);
Log.d("Inside Demo1","Update UI");
}
kindly if any wrong please tell me so i can better update it ... 如果有任何错误,请告诉我,以便我更好地更新它...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.