我们可以在不同的活动中创建多个内部广播接收器

时间:2016-11-19 07:29:09

标签: android broadcastreceiver android-manifest smsmanager

我们可以在不同的活动中创建多个广播接收器吗? 像每个活动有1个广播接收器,并在清单中注册。 我尝试并且工作得很好,但我的问题是它的好坏与消耗更多的内存?或者我如何通过创建一个处理所有进程的广播接收器来消除它。就像我想存储不同的短信我的应用程序有不同的状态,我通过短信收到。所以我在不同的活动创造了不同的广播接收器 我还为接收器添加了一些代码

public static class SmsReceiver extends BroadcastReceiver {
        String a = "";
        DataBaseHandler db;
        @Override
        public void onReceive(final Context context, final Intent intent) {
            db = new DataBaseHandler(context);

            if (!intent.getAction().equals(
                    "android.provider.Telephony.SMS_RECEIVED"))
                return;
            else if (intent != null) {
                Bundle bndl = intent.getExtras();
                SmsMessage[] msg = null;
                String abc = "";
                String msgs = "";

                if (null != bndl) { // if start
                    Object[] pdus = (Object[]) bndl.get("pdus");
                    msg = new SmsMessage[pdus.length];
                    for (int i = 0; i < msg.length; i++) {
                        msg[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                        if (msg[i].getOriginatingAddress().equals("15555215556")) 
                        {
                            abc = msg[i].getOriginatingAddress();
                            msgs = msg[i].getMessageBody().toString();
                        }
                    }
                    if (abc != "" && ! msgs.equals("")) 
                    { // inner if start
                        String[] str_split = msgs.split("\\n|:|,");
                        String temp = str_split[0].substring(str_split[0].lastIndexOf(' ') + 1).trim();
                        ArrayList<String> numb =new ArrayList<String>();
                        if (temp.equals("DEACTIVATED") || temp.equals("  ACTIVATED") ) 
                        {
                            String numbs ;                          
                            for (int j = 1; j < 10; j++) {
                                numbs = str_split[j].substring(str_split[j].lastIndexOf(',') + 1).trim();
                                numb.add(numbs);
                            }

                            for (int i = 1; i < numb.size(); i++)
                                a += i + " " + numb.get(i) + "\n";                          
                            db.update_sys_pwd(temp);
                        }
                        else
                        {
                            return;
                        }
                    }// inner if over
                } // if over
            }
        } // onReceive over
    }

请帮助我,因为我从不使用电话,GSM API。 或者我如何创建1个接收器来处理更新数据的所有其他接收器。喜欢在1个接收器中注册所有广播接收器,然后将其设置为清单文件。

提前致谢。

1 个答案:

答案 0 :(得分:0)

最好让单个BroadcastReceiver处理单个事件(SOLID原则)。但是,您可以注册多个接收器,每个接收器接收不同的事件 您的代码中还有另一个问题 - BroadcastReceiver正在主线程上运行,Android假设BroadcastReceiver中的代码将很快完成。您不应该在其中执行任何长时间运行的操作(写入数据库)。而是通过Intent

传递接收的值来获取接收的数据并启动IntentService以处理该数据