Как правильно использовать будильник с AlarmManager - PullRequest
1 голос
/ 13 мая 2019

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

...