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

时间:2016-11-25 12:04:26

标签: android android-fragments broadcastreceiver android-broadcastreceiver

如何将数据从SMS广播接收器传递到其相关片段以更新数据。  我创建了一个演示,其中我有7个不同的片段,其中有不同种类的状态通过。我已经创建了内部广播接收器,但它不是一个好主意,因为当短信到达时,它调用所有内部类,所以我想在广播接收器类上创建然后在短信接收我想要更新数据我也想将它们存储在数据库中如果片段当前处于打开状态,则更新状态,如短信状态的更改按钮颜色从ON变为OFF。

我把sms广播接收器的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
                }
            }

1 个答案:

答案 0 :(得分:0)

最后我做到了...... //这是主广播接收器类

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");
    }
如果有任何错误,请告诉我,以便我可以更好地更新它......

相关问题