Android 广播接收机不';将代码移动到另一个项目后无法工作
我已经看完了整个代码,一切似乎都正常工作,没有错误,因此更难找到解决方案 我已将代码移到另一个项目 这是我的广播接收机课程:Android 广播接收机不';将代码移动到另一个项目后无法工作,android,Android,我已经看完了整个代码,一切似乎都正常工作,没有错误,因此更难找到解决方案 我已将代码移到另一个项目 这是我的广播接收机课程: public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Notification.Builder builder = new Notification.Builder
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Notification.Builder builder = new Notification.Builder(context);
builder.setContentTitle(intent.getStringExtra("Next"));
builder.setContentText(intent.getStringExtra("String"));
builder.setSmallIcon(R.drawable.notify);
NotificationManager notificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(325, builder.build());
}
}
我在我的主要活动中这样称呼它:
private void notifyUser() {
Intent intent = new Intent(this, MyBroadcastReceiver.class);
intent.putExtra("Next", getResources().getString(R.string.lesson_next));
int days_int = (sun) ? 1:2;
for (int i = 0; i < days_length; i++) {
Calendar[] calendars = getCalendars(i, days_int + i);
ArrayList<String> arrayList = schedules.get(i);
for (int j = 0; j < calendars.length; j++) {
String s = arrayList.get(j);
if (!s.equals(getResources().getString(R.string.lesson_window))) {
intent.putExtra("String", s);
notifyUserTag(intent, 135124 + count, calendars[j].getTimeInMillis());
count++;
}
}
}
}
private void notifyUserTag(Intent intent, int id, long currentTimeMillis) {
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this.getApplicationContext(), id, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, currentTimeMillis,
AlarmManager.INTERVAL_DAY * 7, pendingIntent);
}
private Calendar[] getCalendars(int i, int day) {
int[] nums = lessonNum(schedules.get(i)); int len = nums.length;
Calendar[] calendars = new Calendar[len];
for (int k = 0; k < len; k++)
calendars[k] = setCalendar(nums[k], day);
return calendars;
}
private int[] lessonNum(ArrayList<String> stringArrayList) {
int size = stringArrayList.size();
int[] nums = new int[size];
for (int i = 0; i < size; i++)
nums[i] = lessonNumTry(i, stringArrayList);
return nums;
}
private int lessonNumTry(int i, ArrayList<String> arrayList) {
try {
if (Integer.parseInt(arrayList.get(i).substring(1,2)) == 0)
return 10;
}
catch (NumberFormatException e) {
return Integer.parseInt(arrayList.get(i).substring(0,1));
}
return -1;
}
private Calendar setCalendar(int i, int day) {
Calendar calendar = Calendar.getInstance();
switch (i) {
case 0:
calHelper(calendar, day, 6, 0);
break;
case 1:
calHelper(calendar, day, 7, 0);
break;
case 2:
calHelper(calendar, day, 8, 0);
break;
case 3:
calHelper(calendar, day, 8, 55);
break;
case 4:
calHelper(calendar, day, 9, 50);
break;
case 5:
calHelper(calendar, day, 10, 55);
break;
case 6:
calHelper(calendar, day, 11, 50);
break;
case 7:
calHelper(calendar, day, 12, 45);
break;
case 8:
calHelper(calendar, day, 13, 40);
break;
case 9:
calHelper(calendar, day, 14, 25);
break;
case 10:
calHelper(calendar, day, 15, 15);
break;
}
return calendar;
}
private void calHelper(Calendar calendar, int day, int hour, int minute) {
long currTime = calendar.getTimeInMillis();
calendar.set(Calendar.DAY_OF_WEEK, day);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
long getTime = calendar.getTimeInMillis();
if (getTime < currTime)
calendar.setTimeInMillis(getTime + 604800000);
}
private void notifyUser(){
Intent Intent=新Intent(这个,MyBroadcastReceiver.class);
intent.putExtra(“Next”,getResources().getString(R.string.lesson_Next));
国际日=太阳?1:2;
对于(int i=0;i
发送通知的函数(notifyUser())应该获取一组日历,每个日历指定一天/小时/分钟,并设置警报以在该时间每周启动广播接收器。我在我的旧项目中使用了完全相同的代码,它成功了,但现在没有。我的旧项目和新项目之间的主要变化是,新项目使用数据库存储数据(sqlite3),而旧项目使用文件,我认为这与广播接收器没有被调用/显示/这里发生的任何事情无关
在舱单上我有这个
<receiver android:name=".MyBroadcastReceiver" />
任何帮助都将不胜感激 如果您在清单中声明
<receiver android:name=".MyBroadcastReceiver" />
MyBroadcastReceiver必须在代码根目录中,而不是在子包中。它在根包中吗?您可能希望在清单中键入整个包的名称以确保,例如:
<receiver android:name="org.myapp.receivers.MyBroadcastReceiver" />
您尚未在notifyUser()方法中启动intent,请使用发送广播(intent)代码>定义广播意图后,您没有发送广播意图。在定义您的意图后添加此行:
sendBroadcast(intent);
在清单中使用低于目的过滤器注册接收者
<action android:name="android.intent.action.BOOT_COMPLETED"/>
您尝试过清理和重建吗?我现在尝试过了,但仍然不起作用。我该在哪里添加此行?我的错,尝试更改此行“AlarmManager AlarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);”至“AlarmManager AlarmManager=(AlarmManager)getSystemService(Context.ALARM\u服务)`还是不行。尽管很有趣,sendBroadcast确实发送了它,所以我知道BroadcastReceiver正在工作。您是否可以记录并确认调用了notifyUserTag()方法?是否调用了notifyUserTag()方法。可以确认。它与所有其他Java文件位于同一目录中。