Android 앱에 알림을 설정하려고합니다. 설정 시간이 지정된 특정 요일에 종료됩니다. 모든 것이 첫 번째 알람에는 문제없이 작동하지만 반복하지 않으며 다른 날에는 작동하지 않습니다. 다음Android에서 알림이 반복되지 않음
이인터페이스입니다 : 당신이에서 볼 수 있듯이
private void scheduleAlarm(int dayOfWeek) {
Intent myIntent = new Intent(this , NotifyService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
if (dayOfWeek == 0)
alarmManager.cancel(pendingIntent);
else {
Calendar calendar = Calendar.getInstance();
String time_str[] = reminder_time.getText().toString().split(":");
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time_str[0]));
calendar.set(Calendar.MINUTE, Integer.parseInt(time_str[1]));
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Long time = calendar.getTimeInMillis();
Long weekly = AlarmManager.INTERVAL_HOUR/12; //AlarmManager.INTERVAL_DAY * 7;
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, time, weekly, pendingIntent);
}
}
: "변경 사항 저장"에
을 클릭하면, 각 선택한 날짜에 대한 scheduleAlarm 방법 호출됩니다 버전 알림을 5 분마다 반복하려고했습니다 (Long weekly = AlarmManager.INTERVAL_HOUR/12;
)
알림 서비스 cal 알람이 울릴 때 켜집니다 :
public class NotifyService extends Service {
public NotifyService() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//TODO do something useful
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
Intent intent = new Intent(this , Splash.class);
intent.putExtra(getString(R.string.NOTIFICATION), true);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.notification_icon_ensafe);
long[] pattern = {500,500,500,500,500,500,500,500,500};
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setContentTitle(getString(R.string.reminder))
.setContentText(getString(R.string.reminder_body))
.setLargeIcon(bm)
.setSmallIcon(R.drawable.notification_icon_ensafe)
.setContentIntent(contentIntent)
.setAutoCancel(true)
.setVibrate(pattern)
.setStyle(new NotificationCompat.InboxStyle())
.setSound(Settings.System.DEFAULT_NOTIFICATION_URI);
NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(1, mBuilder.build());
}
}
왜 작동하지 않는가? @Frank으로
가 제안했다
편집, 내가 브로드 캐스트 리시버를 구현하지만, 호출 적이 없어요. 매니페스트에
:
<receiver android:name=".synchro.BootReceiver"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
클래스 :
ComponentName receiver = new ComponentName(getApplicationContext(), BootReceiver.class);
PackageManager pm = getApplicationContext().getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
더 이상의 아이디어를 다음과 같이 방송사는 위에 나열된 scheduleAlarm 방법에 시작
public class BootReceiver extends BroadcastReceiver {
List<Integer> selectedDays;
SharedPreferences preferences;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
**\\ STUFF HAPPENS HERE \\ **
}
}
}
?
답변 해 주셔서 감사합니다. 이 브로드 캐스트 리스너는 OS 후류에서 호출되는 NotifyService 클래스에 구현되어야합니다. – Oiproks
확인. 기본적으로 BootReceiver에서 alarmManager를 통해 알람을 다시 스케줄해야하며 서비스는 알람 자체를 관리합니다. 내가 맞습니까? – Oiproks
네, 맞습니다! – Frank