Я довольно новичок в разработке приложений и пытаюсь создать довольно "простой" планировщик задач, но с функцией повторения задач. Как почти везде сказано, я использую общие настройки, чтобы сохранить данные после перезапуска. Это работает (по крайней мере, в эмуляторе) нормально, пока не сработал будильник.
Тестирование будильника практически невозможно в эмуляторе, потому что мой компьютер не работает в 3 часа ночи (возможно, это необходимо сделать, если нет других возможностей), поэтому я скопировал вывод .apk на моем S8 (Android 9.0). Я даже не могу запустить свое приложение дважды там, потому что на устройстве кажется, что невозможно работать с общими настройками (по крайней мере, я так думаю). Я не могу подключить устройство к Android Studio для отладки, потому что кажется, что мой порт USB-C поврежден.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<String> month = new ArrayList<>();
prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String date = prefs.getString("CURRENTDATE",null);
if(date != null){
for(int i=0;i<Jobs.month_length;i++){
month.add(prefs.getString(Integer.toString(i),"#"));
}
Storage.jobs = new Jobs(month);
}
else{
Storage.jobs = new Jobs();
//Registration
timingCal = Calendar.getInstance();
timingCal.set(Calendar.HOUR, 3);
timingCal.set(Calendar.MINUTE, 0);
timingCal.set(Calendar.SECOND, 0);
long intendedTime = timingCal.getTimeInMillis();
registerMyAlarmBroadcast();
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, intendedTime,AlarmManager.INTERVAL_DAY, pendingIntent);
}
}
private void registerMyAlarmBroadcast()
{
Log.i("ALARM", "Going to register");
myBroadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
MainActivity main = new MainActivity();
Log.d("ALARM","triggered");
ArrayList<String> month= new ArrayList<>();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(main);
SharedPreferences.Editor editPrefs = preferences.edit();
for(int i=1;i<Jobs.month_length;i++){
editPrefs.putString(Integer.toString(i-1),prefs.getString(Integer.toString(i),"#"));
Log.d("PUTTING",i+" to "+(i-1));
}
editPrefs.putString(Integer.toString(30),"");
editPrefs.apply();
}
};
registerReceiver(myBroadcastReceiver, new IntentFilter("com.alarm.example") );
pendingIntent = PendingIntent.getBroadcast( this, 0, new Intent("com.alarm.example"),0 );
alarmManager = (AlarmManager)(this.getSystemService( Context.ALARM_SERVICE ));
}
Я ожидаю, что содержимое «current_day» +1 на следующий день будет текущим / первым, но единственный результат, который я получаю, - это незапускаемое приложение (или даже в тот же день, когда я его пробую) на моем реальном устройстве)