Я продолжаю получать сообщение об ошибке в шапке, и я не знаю, что делать .. (это приложение для напоминания о воде). На форумах много смешных тем. и никто не ответил должным образом. Я использую это для запуска, когда устройство перезагружается. Я изучил много вопросов, но никто не ответил должным образом.
Пожалуйста, помогите мне. Заранее спасибо!
Это мой класс BootReceiver
public class BootReceiver extends BroadcastReceiver {
@SuppressLint("UnsafeProtectedBroadcastReceiver")
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, BootService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(service);
Log.d("tag_boot","foreground service start");
} else {
context.startService(service);
Log.d("tag_boot","service start");
}
}
}
, а это мой класс BootService
public class BootService extends Service {
private String MAIN_DATA = "com.xxxx.xxxx.MAIN";
private SharedPreferences.OnSharedPreferenceChangeListener sharedpreflistener;
public BootService() {
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(MAIN_DATA, Context.MODE_PRIVATE);
waterreceiver();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_NOT_STICKY;
}
public void waterreceiver( int su_aralik) {
Calendar thatDay = Calendar.getInstance();
Calendar today = Calendar.getInstance();
int today_month_day = today.get(Calendar.DAY_OF_MONTH);
int today_month = today.get(Calendar.MONTH);
int today_year = today.get(Calendar.YEAR);
thatDay.setTime(new Date(0)); /* reset */
thatDay.set(Calendar.DAY_OF_MONTH, today_month_day);
thatDay.set(Calendar.MONTH, today_month); // 0-11 so 1 less
thatDay.set(Calendar.YEAR, today_year);
thatDay.set(Calendar.HOUR_OF_DAY, 8);
thatDay.set(Calendar.MINUTE, 0);
thatDay.set(Calendar.SECOND, 0);
Calendar calendar = Calendar.getInstance();
if (calendar.get(Calendar.HOUR_OF_DAY) < 23 && calendar.get(Calendar.HOUR_OF_DAY) > 7) {
thatDay.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + 1);
} else {
thatDay.set(Calendar.DAY_OF_MONTH, today_month_day + 1);
}
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, WaterAlarm.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 7, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Objects.requireNonNull(alarmManager).setRepeating(AlarmManager.RTC_WAKEUP, thatDay.getTimeInMillis(), waterlist[water_pos], pendingIntent);
}
}
Манифест
<receiver android:name=".AlarmReceiver" />
<receiver android:name=".WaterAlarm" />
<receiver android:name=".DietAlarm" />
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
<service
android:name=".BootService"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE" />