android - 如何编辑/重置警报管理器?

标签 android alarmmanager preferences listpreference

我设置了一个首选项屏幕,其中有一个列表首选项,允许用户选择通知他们的时间间隔。

他们可以选择是否每 2、4、8、10 或 12 小时通知一次。

这是我的列表偏好:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<ListPreference
            android:title="Notification Timer"
            android:summary="Select when to Notify"
            android:dialogTitle="Show Notification after every:"
            android:positiveButtonText="OK"
            android:negativeButtonText="Cancel"
            android:entries="@array/entries"
            android:entryValues="@array/entries"
            android:key="listPrefs" />
</PreferenceScreen>

这是我的 Settings.class 文件:

public class Settings extends PreferenceActivity implements OnPreferenceChangeListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);

        ListPreference listPreference = (ListPreference) findPreference("listPrefs");
        listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {

            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {

                return false;
            }
        });
        @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        // TODO Auto-generated method stub
        return false;
    }
}

每次用户更改通知他/她的时间间隔时,我都想更新或重置警报。对于前 - 如果用户选择 4 小时,则必须在 4 小时后通知他/她,或者如果用户选择 10 小时,则必须在 10 小时后通知他/她!

最佳答案

请按照以下步骤操作:

  1. 将以下方法复制到您的 Setting.java 文件中:

    private final int NOTIFICATION_TIMER = 11;
    
    public void setAlarm(Context mContext,int requestCode,long time) {
    
        Intent myIntent = new Intent(mContext, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, requestCode, myIntent,0);
    
        cancelAlarmIfExists(mContext,requestCode,myIntent);
    
        AlarmManager alarmManager = (AlarmManager)mContext.getSystemService(ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, (System.currentTimeMillis()+time), time, pendingIntent);
    }
    
    public void cancelAlarmIfExists(Context mContext,int requestCode,Intent intent){
        try {
            PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent,0);
            AlarmManager am=(AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
            am.cancel(pendingIntent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
  2. onPreferenceChange() 方法中调用它们。像这样:

    listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {
    
            long time = 34352355253; // calculate millisecons from change value by user.
            setAlarm(Settings.this,NOTIFICATION_TIMER,time);
            return false;
        }
    });
    

关于android - 如何编辑/重置警报管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25009195/

相关文章:

android - 报警管理器问题?

ios - 如何在应用程序首选项设置 ios 中将值写入文本字段?

iphone - 向 iPhone 首选项/设置包添加按钮?

android - 在 Gingerbread 上安装本地 .apk 文件的 Intent

android - 发布前测试 admob

android - 无法从 BroadcastReceiver 调用 IntentService

android - 如何使用 flutter 警报管理器打开应用程序

java - Android 保存并检查,单选按钮

java - 如何修复此 DataBinding 和 LiveData 代码?

java - token 上的 Eclipse 语法错误,没有任何明显错误