2016-11-19 3 views
0

異なる活動で複数の放送受信機を作成できますか? はすべてのアクティビティに1台のブロードキャスト受信者があり、マニフェストにも登録されています。 私はうまくやってみましたが、私の質問はそれが良いかどうか、そしてそれ以上のメモリを消費することですか?すべてのプロセスを処理する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のコードが非常に速く終了すると想定しています。その中に長期間実行されるアクション(データベースへの書き込み)は行わないでください。代わりに、受け取ったデータを取得し、インテント経由で受け取った値を渡すことでそのデータを処理するためのIntentServiceを開始してください。

+0

私は今何をしているのかが正しいか間違っているか教えてもらえますか?または私は他のアイデアを提案することができます。なぜなら私は決してアイデアを持っていないからです。 –

+0

BroadcastReceiverをマニフェストに登録すると、アプリが終了していても、常にAndroidによってトリガーされます。一方、動的に(.onpause()および.onResume())メソッドを登録および登録解除すると、その画面がアクティブな場合にのみイベントを受信します。 –

+0

いいえステータスコードはいつでも受信できます受信機の登録を解除することはできません –

関連する問題