2016-11-19 3 views
0

다른 활동에서 둘 이상의 브로드 캐스트 수신기를 만들 수 있습니까? 모든 활동과 마찬가지로 에는 브로드 캐스트 리시버가 1 개 있고 매니페스트에 등록되어 있습니다. 나는 좋은 일을 시도했지만 잘 작동하지만 좋은 결과를 얻었는지, 더 많은 메모리를 소비 하는가? 또는 모든 프로세스를 처리하는 하나의 브로드 캐스트 리시버를 작성하여 어떻게 제거 할 수 있습니까? 다른 SMS를 저장하고 싶습니다. 내 응용 프로그램에는 SMS를 통해 수신되는 여러 종류의 상태가 있습니다. 그래서 나는 다른 활동에서 다른 방송 수신기를 만들었습니다. 나는 또한 내가 전화, GSM의 API와 함께 작동하지 않기 때문에 다른 활동에서 하나 이상의 내부 브로드 캐스트 수신기를 만들 수 있습니까?

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 
    } 

이 제발 도와주세요 수신기

에 대한 몇 가지 코드를 삽입. 또는 어떻게 업데이트 데이터에 대한 다른 모든 수신기를 처리하는 1 수신기를 만들 수 있습니다. 1 수신기에 모든 브로드 캐스트 리시버를 등록한 다음 매니페스트 파일로 설정합니다.

미리 감사드립니다.

+0

답변을 요청하십시오. –

+0

모든 종류의 활동에 추가하고 싶은 방송과 같은 종류입니까? – Ichthyocentaurs

+0

예,이 수업은 모든 제 활동에 추가됩니다. 그리고 나는 다른 sms를 받고 다른 sms는 다른 활동에서 사용되는 다른 상태를 포함한다. –

답변

0

단일 BroadcastReceiver hanle 단일 이벤트 (SOLID 원칙)를 사용하는 것이 좋습니다. 그러나 각각 다른 이벤트를 수신하는 여러 수신자를 등록 할 수 있습니다. 코드에 또 다른 문제가 있습니다. BroadcastReceiver가 메인 스레드에서 실행 중이며 Android는 BroadcastReceiver의 코드가 매우 빨리 완료된다고 가정합니다. 그 안에 장기간 실행되는 작업 (데이터베이스 작성)을해서는 안됩니다. 대신 수신 된 데이터를 가져 와서 Intent를 통해받은 값을 전달하여 해당 데이터를 처리하기위한 IntentService를 시작하십시오.

+0

그래서 내가 지금하고있는 일이 옳은지 또는 잘못되었는지를 말해 줄 수 있습니까? 또는 다른 아이디어를 제안 할 수 있습니다. 왜냐하면 나는 결코 그것을 사용하지 않기 때문에 아이디어가 없습니다. –

+0

Manifest에 BroadcastReceiver를 등록하면 앱이 종료 된 경우에도 Android에 의해 항상 트리거됩니다. 반면, 동적으로 (.onpause() 및 .onResume()) 메소드를 등록 및 등록 취소하면 해당 화면이 활성 상태 일 때만 이벤트가 수신됩니다. –

+0

아니요 내 상태 코드는 언제든지 수신됩니다 수신기를 등록 취소 할 수 없으므로 시간을 수정하지 마라. –