2017-08-08 18 views
0

私が取り組んでいるアプリでは、ユーザーがメッセージを受け取るたびに、メッセージの内容がBroadcastReceiverを使ってアプリに配信されます。私はこのインテントにフィールドを追加して、いくつかの追加情報を取得したいのですが、インテントがどこから来たのか分かりません。ここで BroadcastReceiverインテントはどこから来たのですか?どのように変更できますか?

が放送され、その onReceive()方法:これらは私のマニフェストファイル内にある意図-フィルタでも

IntentFilter intFilt = new IntentFilter(BROADCAST_ACTION); 
    getActivity().registerReceiver(br, intFilt); 

br = new BroadcastReceiver() { 

     public void onReceive(Context context, Intent intent) { 

      int task = intent.getIntExtra(PARAM_TASK, 0); 
      int status = intent.getIntExtra(PARAM_STATUS, 0); 

      int msgId = intent.getIntExtra("msgId", 0); 
      long msgFromUserId = intent.getLongExtra("msgFromUserId", 0); 
      int msgFromUserState = intent.getIntExtra("msgFromUserState", 0); 
      int msgFromUserVerify = intent.getIntExtra("msgFromUserVerify", 0); 
      String msgFromUserUsername = intent.getStringExtra("msgFromUserUsername"); 
      String msgFromUserFullname = intent.getStringExtra("msgFromUserFullname"); 
      String msgFromUserPhotoUrl = intent.getStringExtra("msgFromUserPhotoUrl"); 
      String msgMessage = intent.getStringExtra("msgMessage"); 
      String msgImgUrl = intent.getStringExtra("msgImgUrl"); 
      int msgCreateAt = intent.getIntExtra("msgCreateAt", 0); 
      String msgDate = intent.getStringExtra("msgDate"); 
      String msgTimeAgo = intent.getStringExtra("msgTimeAgo"); 
      int msgTransactionValue = intent.getIntExtra("transValue",0); 

      Chat1Item c = new Chat1Item(); 
      c.setId(msgId); 
      c.setFromUserId(msgFromUserId); 
      c.setFromUserState(msgFromUserState); 
      c.setFromUserVerify(msgFromUserVerify); 
      c.setFromUserUsername(msgFromUserUsername); 
      c.setFromUserFullname(msgFromUserFullname); 
      c.setFromUserPhotoUrl(msgFromUserPhotoUrl); 
      c.setMessage(msgMessage); 
      c.setImgUrl(msgImgUrl); 
      c.setCreateAt(msgCreateAt); 
      c.setDate(msgDate); 
      c.setTimeAgo(msgTimeAgo); 
      c.setTransactionValue(msgTransactionValue); 

Log.e(LOG_TAG, "onReceive: task = " + task + ", status = " + status + " " + c.getMessage() + " " + Integer.toString(c.getId())); 



      final Chat1Item lastItem = (Chat1Item) 
listView.getAdapter().getItem(listView.getAdapter().getCount() - 1); 

      messagesCount = messagesCount + 1; 

      chat1List.add(c); 

      if (!visible) { 

       try { 

        Uri notification = 
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
        Ringtone r = RingtoneManager.getRingtone(getActivity(), notification); 
        r.play(); 

       } catch (Exception e) { 

        e.printStackTrace(); 
       } 
      } 

      chatAdapter.notifyDataSetChanged(); 

      scrollListViewToBottom(); 



      getNextMessages(); 
     } 

が、それはまたBroadcastReceiverを登録するIntentFilterを使用しています:

 <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 


     <service 
      android:name="com.thetasocial.app.service.MyFcmListenerService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
      </intent-filter> 
     </service> 

     <service 
      android:name="com.thetasocial.app.service.MyInstanceIDListenerService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> 
      </intent-filter> 
     </service> 

     <service 
      android:name="com.thetasocial.app.service.MyService" 
      android:exported="false" /> 

私にスターを与える手がかり〜からt。前もって感謝します。

答えて

0

このすべての最初には、匿名のローカル放送のreceiver.ieですあなたはmanifest.xmlでその受信機を見つけることができません。このレシーバは登録されていなければなりません。これは必須であり、ブロードキャストインテントフィルタ名の登録(または)登録解除コードで、その特定のアクティビティ(または)フラグメントで行う必要があります。あなたの場合はBROADCAST_ACTIONの名前です。プロジェクト全体でBROADCAST_ACTIONの使い方を見つけてみてください。プロジェクト全体の使用状況を確認するには、Androidスタジオを使用している場合、ショートカットはctrl + shift + Fです。あなたの放送の意図は、インテントフィルタ名がBROADCAST_ACTIONが一定の値がどこかに宣言しなければならない単なる文字列である

Intent intent = new Intent(BROADCAST_ACTION); 

sendBroadcast(intent); 

注、以下のようになります。

希望します:)

+0

最後に見つけました!あなたは正しかった、それは地元の意図だった。問題は、アンドロイドスタジオのFind usage for useのショートカットが二重の 'shift'だと思っていたことでした。前もって感謝します。 –

+0

@HosseinFarrokhi:アップ投票答え: – Jeevanandhan

+0

私はすでに答えをupvotedしているが、私は15未満の評判を持っているので、それは表示されません:) –

0

あなたはBroadcastRecieverが受信する放送される意図や意思コンテンツが表示されますが... sendBroadcastファイルまたはプロジェクトを見つける...

+0

実際には、私はこのファイルをコーディングしていません。自分のニーズを満たすために変更しています。 新しい 'br'を作成すると、エラーが発生します: ** 'BroadcastReceiverから派生したクラス'匿名クラスは、抽象宣言または 'BroadcastReceiver'の 'onRecieve(Context、Intent) **。このエラーはあなたを助けることができますか? –

+0

今私はそれを得る意図は、放送によって受信されるメッセージを含む意図です...今あなたはターゲットインテントを変更する必要がある多くの情報を取得する –

+0

正確に!今質問はどこから来たのでしょうか?どうすれば変更できますか? –

関連する問題