java - 我可以在 Android 中将类(BroadcastReceiver)作为方法参数传递吗?
问题描述
我的 Android 程序有几十个广播接收器,做各种不同的事情,因此制作一个通用的接收器来处理所有事情是不切实际的。但是我发现自己有超过 1000 行代码,一遍又一遍地做同样的事情,只是将 AlarmManagers 设置为指向 BroadcastReceivers。
例如:
public void startStatsAlarm() {
Log.d(TAG, "startStatsAlarm: in start alarm");
boolean alarmUp = (PendingIntent.getBroadcast(mContext, 1,
new Intent(mContext, StatsAlarmReceiver.class),
PendingIntent.FLAG_NO_CREATE) != null);
if(alarmUp){
Log.d(TAG, "startStatsAlarm: alarm already up, skipping");
return;
}
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 30);
AlarmManager alarmMgr = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(mContext, StatsAlarmReceiver.class);
PendingIntent statsIntent = PendingIntent.getBroadcast(mContext, 1, intent, 0);
if (alarmMgr != null) {
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, statsIntent);
}
}
是众多之一。我唯一需要更改的是 MINUTE 和 HOUR、Interval 和 BroadcastReceiver。一定有某种方法可以重用相同的代码,而不是一遍又一遍地使用相同的东西?
解决方案
尝试这个 :
public void startStatsAlarm(Context mContext, BroadcastReceiver mClass, int hour, int minute) {
Log.d(TAG, "startStatsAlarm: in start alarm");
boolean alarmUp = (PendingIntent.getBroadcast(mContext, 1,
new Intent(mContext, mClass.getClass()),
PendingIntent.FLAG_NO_CREATE) != null);
if (alarmUp) {
Log.d(TAG, "startStatsAlarm: alarm already up, skipping");
return;
}
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
AlarmManager alarmMgr = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(mContext, mClass.getClass());
PendingIntent statsIntent = PendingIntent.getBroadcast(mContext, 1, intent, 0);
if (alarmMgr != null) {
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, statsIntent);
}
}
推荐阅读
- reactjs - React Hooks + Context API 准备好为客户制作网站了吗?
- c++ - 避免 C++ 虚拟继承
- javascript - 如何不断刷新 getTime 输出?
- java - WebClient 无法解析
- javascript - 使用旧的 Jquery 更新 JS
- c - 为什么我仍然收到“预期标识符”错误?
- java - 如何更改前端文件夹位置并在 Vaadin14 中进行配置?
- flutter - 颤动容器内元素的相对位置
- python - python paho mqtt无法使用用户名和密码连接到mqtts
- android - WebRTC Android 回声消除