繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM