سؤال

لقد قمت بإعداد شاشة التفضيلات التي لدي فيها قائمة تفضيلات تسمح للمستخدم بتحديد الفاصل الزمني لإعلامهم.

يمكنهم اختيار ما إذا كان سيتم إخطارهم بعد كل 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. انسخ الطرق التالية إلى ملفك الإعداد.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;
        }
    });
    

نصائح أخرى

flag_cancel_current له نفس التأثير كما هو الحال أعلاه الإجابة

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top