كيفية تعديل/إعادة ضبط مدير الإنذار؟
-
20-12-2019 - |
سؤال
لقد قمت بإعداد شاشة التفضيلات التي لدي فيها قائمة تفضيلات تسمح للمستخدم بتحديد الفاصل الزمني لإعلامهم.
يمكنهم اختيار ما إذا كان سيتم إخطارهم بعد كل 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 ساعات!
المحلول
اتبع الخطوات التالية:
انسخ الطرق التالية إلى ملفك الإعداد.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(); } }
اتصل بهم من
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; } });
نصائح أخرى
flag_cancel_current له نفس التأثير كما هو الحال أعلاه الإجابة
giveacodicetagpre.لا تنتمي إلى StackOverflow