Java 我可以在Android中将类(BroadcastReceiver)作为方法参数传递吗?

Java 我可以在Android中将类(BroadcastReceiver)作为方法参数传递吗?,java,android,Java,Android,我的Android程序有几十个广播接收器,可以做各种各样的事情,因此制作一个通用接收器来处理所有事情是不可行的。但我发现自己有超过1000行的代码,一遍又一遍地做同样的事情,只是将AlarmManager设置为指向广播接收器 例如: 这是许多中的一个。我只需要更改分钟和小时、间隔和广播接收器。 必须有某种方法重用相同的代码,而不是重复使用相同的代码?尝试以下方法: public void startStatsAlarm(Context mContext, BroadcastReceiver mC

我的Android程序有几十个广播接收器,可以做各种各样的事情,因此制作一个通用接收器来处理所有事情是不可行的。但我发现自己有超过1000行的代码,一遍又一遍地做同样的事情,只是将AlarmManager设置为指向广播接收器

例如:

这是许多中的一个。我只需要更改分钟和小时、间隔和广播接收器。 必须有某种方法重用相同的代码,而不是重复使用相同的代码?

尝试以下方法:

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

试着这样调用它
startStatsAlarm(getApplicationContext(),newstatsalarmreceiver(),30,20)
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);
        }
    }