2017-08-08 63 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

!现在问题是这个意图来自哪里?我该如何改变它? –