简体   繁体   English

如何将数据从SMS广播接收器传递到相关片段

[英]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.

相关问题 如何使用警报管理器将数据从片段传递到广播接收器 - How to Pass Data from Fragment to Broadcast Receiver with Alarm Manager 如何将数据从广播接收器发送到片段? - How to send a data from a broadcast receiver to fragment? 如何将数据从活动中的功能传递到通知接收器广播接收器? - How to pass data from function in activity to a Notifcation Receiver Broadcast Receiver? 来自广播接收器的短信接收器 - sms receiver from broadcast receiver 如何在广播接收器中获取短信数据 - How to get sms data in a Broadcast receiver 如何在Broadcast Receiver的onReceive()中使用来自SQLite的数据更新片段UI - How to update fragment UI with data from SQLite in the onReceive() of Broadcast Receiver 将数据从广播接收器发送到片段 - Send data from broadcast receiver to fragment 如何将Arraylist从活动传递到广播接收器到另一个广播接收器 - How to pass Arraylist from an activity to Broadcast receiver to another broadcast receiver 如何从广播接收器调用片段方法 - How to call fragment method from broadcast receiver 如何将数据从 Broadcast Receiver 传递到 Recycler view Item - How to Pass data from Broadcast Receiver to Recycler view Item
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM