0

SDKを使用してSonySmartwatch用のアプリを作成しています。主な活動の一部は次のとおりです。

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のデフォルトの設定値でもありません。ただし、電話でアプリの設定のいずれかをクリックすると、保存された設定値がすぐにスマートウォッチに適用されます。

メインクラスにはonCreate()メソッドがないことに注意してください。これにより、ループが発生します。

設定アクティビティの一部は次のとおりです。

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開発にかなり不慣れなので、この問題はSonySDKとはまったく関係がない可能性があります。誰か助けてもらえますか?

4

1 に答える 1

2

おっしゃるとおり、PreferenceActivity が初めて表示されるまで、公式のサンプル拡張機能の設定は読み込まれません。設定にアクセスするときに正しいデフォルト値を使用する場合、これは問題になりません。

拡張機能の初回起動時に設定をロードする場合は、android.app.Application クラスと onCreate メソッドを拡張できます。

例えば:

public class MySmartWatchApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        PreferenceManager.setDefaultValues(this, R.xml.app_preferences, false);
    }
}
于 2012-06-25T07:21:41.820 に答える