2017-08-08 62 views
0

在我正在處理的應用程序中,只要用戶收到消息,郵件內容就會通過BroadcastReceiver傳遞到應用程序。我想爲這個意圖添加一個字段並獲得一些額外的信息,只是不知道意圖來自哪裏。BroadcastReceiver意圖來自哪裏?我該如何改變它?

這裏是廣播和onReceive()方法:

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(); 
     } 

它也採用了IntentFilter的註冊BroadcastReceiver

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

也是這些都是意向性的過濾器,在我的清單文件:

 <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" /> 

給我一個線索給明星來自。提前致謝。

回答

0

首先,這是地方廣播receiver.ie,匿名因此您無法在manifest.xml中找到該接收器。這個接收器必須被註冊和註銷,這是強制性的,也必須在特定的活動(或)片段中完成,在註冊(或)註銷代碼中,我們可以找到廣播意圖過濾器名稱。在你的情況下,BROADCAST_ACTION是名稱。嘗試在整個項目中找到BROADCAST_ACTION的用法。要查找整個項目的使用情況,如果您使用的是Android Studio,則表示快捷方式爲ctrl + shift + F。您的廣播意圖就會像下面,

Intent intent = new Intent(BROADCAST_ACTION); 

sendBroadcast(intent); 

注意圖過濾器名稱只是一個字符串BROADCAST_ACTION應該恆定值某處聲明。

希望這是有用的:)

+0

終於找到了!你是對的,這是當地的意圖。問題是我認爲在android studio中查找用法的快捷方式是雙「shift」。提前致謝。 –

+0

@HosseinFarrokhi:投票答案:) – Jeevanandhan

+0

我已經upvoted的答案,但因爲我有不到15名聲譽,它不顯示:) –

0

找到sendBroadcast文件或項目......在那裏你會看到被廣播到由BroadcastReciever接收的意圖和意圖內容...

+0

其實,我還沒有編碼這個文件,我只是修改它來滿足我的需求。 當我做一個新的'br'時,它會出現如下錯誤: **類'從BroadcastReceiver派生的匿名類「必須聲明爲抽象或在'BroadcastReceiver'中實現抽象方法onRecieve(Context,Intent) **。這個錯誤可以幫助你嗎? –

+0

現在我明白了,意圖是包含消息的意圖被廣播接收......現在要獲取更多信息,您需要修改目標意圖 –

+0

!現在問題是這個意圖來自哪裏?我該如何改變它? –