Приложение Android принудительно останавливается после перезапуска - PullRequest
0 голосов
/ 04 мая 2019

Я довольно новичок в разработке приложений и пытаюсь создать довольно "простой" планировщик задач, но с функцией повторения задач. Как почти везде сказано, я использую общие настройки, чтобы сохранить данные после перезапуска. Это работает (по крайней мере, в эмуляторе) нормально, пока не сработал будильник.

Тестирование будильника практически невозможно в эмуляторе, потому что мой компьютер не работает в 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 на следующий день будет текущим / первым, но единственный результат, который я получаю, - это незапускаемое приложение (или даже в тот же день, когда я его пробую) на моем реальном устройстве)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...