コード全体を調べたところ、すべて正常に動作しているようですが、エラーがないので解決策を見つけるのがさらに難しくなります。コードを別のプロジェクトに移動した後で放送受信機が動作しない
コードを別のプロジェクトに移動しました。ここで
は私の放送受信機のクラスである:
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);
}
通知(notifyUser())を送る機能を取得することになっています毎日/時/分を指定するカレンダーのセットと、その時に毎週放送受信機を起動するアラームを設定します。私は古いプロジェクトでまったく同じコードを使用していましたが、現在は機能していません。私の古いプロジェクトと新しいものとの間の主な変更点は、新しいものがデータを格納するためにデータベース(sqlite3)を使用していたのに対し、古いものはファイルを使用していましたが、これはブロードキャスト受信機がここで何が起きているのかがわかります。マニフェストで
私はこの
<receiver android:name=".MyBroadcastReceiver" />
すべてのヘルプは理解されるであろうしました!
きれいにして再構築しましたか? – Ryan
私は今やったがそれでも動作しません –