Общие настройки не вступят в силу, пока не будет нажата кнопка «Настройки».

Я пишу приложение для Sony Smartwatch, используя их SDK. Вот часть основной деятельности:

class SmartTickerActivity extends ControlExtension {
    private Handler mHandler;

    SmartTickerActivity(final String hostAppPackageName, final Context context, Handler handler) {
        super(context, hostAppPackageName);

        if (handler == null) {
            throw new IllegalArgumentException("handler == null");
        }

    }

    @Override
    public void onStart() {
        //do some stuff

        PreferenceManager.setDefaultValues(mContext, R.xml.preference, false);
    }

Проблема в том, что сохраненные настройки не применяются к умным часам при запуске приложения. Значения предпочтений по умолчанию также не взяты из XML. Однако, если я нажму на любую из настроек приложения на телефоне, сохраненные значения настроек будут немедленно применены к SmartWatch.

Обратите внимание, что в основном классе нет метода onCreate(), и это ставит меня в тупик.

Вот часть действия Preference:

public class MyPreferenceActivity extends PreferenceActivity {

    private OnSharedPreferenceChangeListener mListener = new OnSharedPreferenceChangeListener() {

        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            Preference pref = findPreference(key);

            if (pref instanceof ListPreference) {
                ListPreference listPref = (ListPreference) pref;
                pref.setSummary(listPref.getEntry().toString());
            }

            if (pref instanceof EditTextPreference) {
                EditTextPreference editTextPref = (EditTextPreference) pref;
                pref.setSummary(editTextPref.getText().toString());
            }

        }

    };  

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preference);  

    setSummaries();

    setTypeface(SmartTickerActivity.mainLayout);

    if (previewLayout != null) setTypeface(previewLayout);

    // Handle read me
    Preference readMe = findPreference(getText(R.string.preference_key_read_me));
    readMe.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        public boolean onPreferenceClick(Preference readMe) {
            showDialog(DIALOG_READ_ME);
            return true;
        }
    });

    // Handle about
    Preference about = findPreference(getText(R.string.preference_key_about));
    about.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        public boolean onPreferenceClick(Preference about) {
            showDialog(DIALOG_ABOUT);
            return true;
        }
    });

     // Handle preview
        Preference preview = findPreference(getText(R.string.preference_key_preview_dialog));
        preview.setOnPreferenceClickListener(new OnPreferenceClickListener() {

            public boolean onPreferenceClick(Preference preview) {
                showDialog(DIALOG_PREVIEW);
                return true;
            }
        });      

    }

Я довольно неопытен в разработке Android, поэтому проблема вполне может не иметь ничего общего с Sony SDK. Кто-нибудь может помочь?


person NumberElevenRoad    schedule 21.06.2012    source источник


Ответы (1)


Вы правы, настройки официальных примеров расширений не загружаются до тех пор, пока PreferenceActivity не будет показан в первый раз. Если вы используете правильные значения по умолчанию при доступе к настройкам, это не должно быть проблемой.

Если вы хотите, чтобы настройки загружались при первом запуске расширения, вы можете расширить класс android.app.Application и метод onCreate.

Например:

public class MySmartWatchApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        PreferenceManager.setDefaultValues(this, R.xml.app_preferences, false);
    }
}
person Jerker    schedule 25.06.2012
comment
Спасибо! Работает так, как я хотел. Я добавил имя своего нового класса приложения в часть «приложение» моего манифеста, и теперь я могу получить свои настройки из любого метода, захватив контекст экземпляра приложения. Идеально! - person NumberElevenRoad; 28.06.2012