2016-11-19 35 views
0

我们可以在不同的活动中创建多个广播接收机吗? 就像每个活动都有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个接收器内注册所有广播接收器,然后将其设置为清单文件。

在此先感谢。

+0

请帮助我,我需要你的答案。 –

+0

与您希望添加到所有活动课程的广播相同吗? – Ichthyocentaurs

+0

是啊,这个课程将增加我所有的活动。我收到不同的短信和不同的短信包含不同的活动中使用的状态。 –

回答

0

最好让单个BroadcastReceiver单独事件(SOLID原则)。但是,您可以注册多个接收器,每个接收器都接收不同的事件 代码中存在另一个问题 - BroadcastReceiver在主线程上运行,Android假设BroadcastReceiver中的代码将以非常快的速度完成。你不应该做任何长时间运行的动作(写入数据库)。相反,获取收到的数据,并启动IntentService处理该数据通过传递收到的值通过意图

+0

所以你可以告诉我,我现在在做什么是对还是错?或者你可以建议我其他的想法,因为我从来没有与它合作,所以我没有任何想法。 –

+0

如果您在Manifest中注册BroadcastReceiver,即使您的应用已关闭,它也会始终由Android触发。另一方面,当你动态地注册和取消注册(在.onpause()和.onResume()方法中)时,它只会在该屏幕处于活动状态时才会收到事件 –

+0

不,我的状态代码在任何时候都会收到不修复时间,所以我不能注销接收器 –

相关问题