Поэтому я попробовал несколько способов и следовал нескольким руководствам, чтобы попытаться обновить мои SharedReferences, но, похоже, это просто не работает, и я понятия не имею, почему.
Я попытался зарегистрировать приемник вещания в кодеи в данный момент я пытаюсь сделать это внутри Manifest.xml.
OnCreate () опущен до (я думаю) соответствующих частей.
MainActivity.java
public static final String alarm = "com.example.aufgaben_planer.alarm";
public static final String sharedPrefs = "com.example.aufgaben_planer.MONTH";
SharedPreferences prefs;
protected void onCreate(Bundle savedInstanceState) {
prefs = getApplication().getSharedPreferences(sharedPrefs,Context.MODE_PRIVATE);
timingCal = Calendar.getInstance();
timingCal.set(Calendar.HOUR, 17); // At the hour you want to fire the alarm
timingCal.set(Calendar.MINUTE, 55); // alarm minute
timingCal.set(Calendar.SECOND, 0); // and alarm second
long intendedTime = timingCal.getTimeInMillis();
alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(this, MonthManager.class);
alarmIntent.setAction(alarm);
pendingIntent = PendingIntent.getBroadcast( this, 0, alarmIntent,PendingIntent.FLAG_UPDATE_CURRENT );
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, intendedTime,AlarmManager.INTERVAL_DAY, pendingIntent);
TextView tv = findViewById(R.id.temp_tasks);
tv.setText(prefs.getString("REC","NOT CALLED"));
}
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aufgaben_planer">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
>
<activity android:name=".Add_job" android:parentActivityName=".MainActivity"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MonthManager" android:process=":remote">
<intent-filter>
<action android:name="com.example.aufgaben_planer.alarm"></action>
</intent-filter>
</receiver>
</application>
</manifest>`
MonthManager.java
public class MonthManager extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
Log.d("BISASAM","triggered");
SharedPreferences preferences = context.getSharedPreferences(MainActivity.sharedPrefs,Context.MODE_PRIVATE);
SharedPreferences.Editor editPrefs = preferences.edit();
editPrefs.putString("REC","Receiver called");
editPrefs.commit();
for(int i=1;i<Jobs.month_length;i++){
editPrefs.putString(Integer.toString((i-1)),preferences.getString(Integer.toString(i),"#"));
Log.d("BISASAM",i+" to "+(i-1));
}
editPrefs.putString(Integer.toString(30),"");
editPrefs.commit();
}
}
Как добавлено в коде, я ожидал увидеть "вызываемый получатель" в TextView, который находится вMainActivity, но я просто получаю «НЕ ВЫЗВАН».Кажется, что будильник установлен правильно, потому что в аварийном сообщении dumpsys оболочки adb он указан.
Редактировать: По какой-то причине он работает сейчас в эмуляторе, но всегда ожидает подключения отладчика.
Редактировать: В качестве последнего вопроса: как я могу убедиться, что OnReceive () завершается, когда я снова открываю приложение.Потому что теперь я могу открыть его, затем должен закрыть, и после того, как я снова открою все отлично.