Android 如何监听任何活动上的firebase通知
我已经按照几个教程将通知从firebase发送到Android应用程序,我能够毫无问题地接收通知 我试图理解两件事:Android 如何监听任何活动上的firebase通知,android,notifications,Android,Notifications,我已经按照几个教程将通知从firebase发送到Android应用程序,我能够毫无问题地接收通知 我试图理解两件事: 当用户查看未处理通知的活动时,如何处理通知的接收 当应用程序正在运行但不在前台时,我收到一个通知,当我从系统托盘中单击它时,应用程序打开已定义广播者的活动-我如何控制打开的活动 下面是处理通知的活动的代码 public class DisplayNotificationActivity extends AppCompatActivity { private Broadca
public class DisplayNotificationActivity extends AppCompatActivity {
private BroadcastReceiver mRegistrationBroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_notification);
mRegistrationBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// checking for type intent filter
if (intent.getAction().equals(Config.REGISTRATION_COMPLETE)) {
// gcm successfully registered
// now subscribe to `global` topic to receive app wide notifications
FirebaseMessaging.getInstance().subscribeToTopic(Config.TOPIC_GLOBAL);
} else if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
// new push notification is received
String message = intent.getStringExtra("message");
Toast.makeText(getApplicationContext(), "Push notification: " + message, Toast.LENGTH_LONG).show();
txtMessage.setText(message);
}
}
};
如果您需要查看代码的其他部分,请告诉我
当用户查看未处理通知的活动时,如何处理通知的接收
我会尽量把它缩短。当您的应用程序位于前台时,会在您实现的FirebaseMessagingService
的onMessageReceived()
方法中接收通知。现在,您应该向哪个活动广播该事件?创建一个基本活动类,并使您的所有活动扩展它。在BaseActivity中,您可以使用广播方法或尝试使用一些Eventbus
库,如我所做的:
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onNotificationReceived(NotificationReceieveBean bean){
if(bean != null){
ViewUtils.showJobOfferSnackBar(this, bean.map);
EventBus.getDefault().removeStickyEvent(bean);
}
}
扩展基本活动的任何活动都将能够接收通知事件。你可以据此处理
当应用程序正在运行但不在前台时,我收到一个通知,当我从系统托盘中单击它时,应用程序打开已定义广播者的活动-我如何控制打开的活动
通常,当您单击系统生成的通知时,您的第一个活动就会打开。在onCreate()示例中,您必须检查捆绑包中的数据
实例的密钥与从服务器发送的密钥相同:
**编辑**
public abstract class BaseNotificationHandlerActivity extends AppCompatActivity {
protected int activityFlag = 0; // set a unique value from each extending Activity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onStart(){
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(NotificationItem notif) {
if(activityFlag == 1){
// this means Starting Activity, so handle for it particularly
NotificationHelper notifHelper = new NotificationHelper(this);
notifHelper.AddNotificationItem(notif);
}
else if(activityFlag ==2){
// for some other Activity
}
}
}
public class StartingActivity extends BaseNotificationHandlerActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_starting);
activityFlag = 1; // add unique flag for Activity here
}
@Override
public void onResume() {
super.onResume();
}
好的-关于问题1,对于某些活动,我如何以不同的方式处理通知的接收?@andrewb,只需在BaseActivity中创建一个处理通知的方法,如果实现活动希望以不同的方式处理通知,则应覆盖该方法:)您提到BaseActivit,y,在我的例子中,这是DisplayNotificationActivity吗?在我的回答中,我已经解释了BaseActivity的目的和用法。你所有的活动都应该扩展它。您可以为它命名任何您想要的名称。我正在尝试扩展它,但当我这样做时,广播侦听器不会收到通知
public abstract class BaseNotificationHandlerActivity extends AppCompatActivity {
protected int activityFlag = 0; // set a unique value from each extending Activity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onStart(){
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(NotificationItem notif) {
if(activityFlag == 1){
// this means Starting Activity, so handle for it particularly
NotificationHelper notifHelper = new NotificationHelper(this);
notifHelper.AddNotificationItem(notif);
}
else if(activityFlag ==2){
// for some other Activity
}
}
}
public class StartingActivity extends BaseNotificationHandlerActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_starting);
activityFlag = 1; // add unique flag for Activity here
}
@Override
public void onResume() {
super.onResume();
}