私は次の好みを持っています:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<RingtonePreference
android:showDefault="true"
android:showSilent="true"
android:title="@string/feed_alert_ringtone"
android:ringtoneType="ringtone|notification|alarm|all"
android:key="alertringtone"
android:persistent="false">
</RingtonePreference>
</PreferenceScreen>
ユーザーがこの設定を変更すると、手動で Uri をデータベースに保存します。
public boolean onPreferenceChange(Preference pref, Object change) {
String ringtone = change.toString();
// save it to a db
...
return true;
}
私の問題は、ユーザーが閉じてからに戻ったときPreferenceScreen
、のデフォルト値RingtonePreference
が常にあることSilence
です。もちろん、手動で値を設定する必要があります。
私の中でこれを試しましたPreferenceActivity
:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings); // the XML above
String database_ringtone = ... // get the string saved above from db
// and according to some parameters passed
// to the intent
Preference ringtone = findPreference("alertringtone");
ringtone.setDefaultValue( database_ringtone );
// also tried:
ringtone.setDefaultValue( Uri.parse(database_ringtone) );
}
残念ながら、設定は「無音」(空を意味する)のままです。がデフォルト値Preference
でない場合は使用されると思いました。persistent
persistent
プリファレンスは複数のアイテムに使用され、インテントに渡された追加データに応じて DB から取得したデータが変更されるため、作成できません。
それでも、デフォルト値を設定したくはありませんが、データベースから取得した現在の値を設定します。これは回避策かもしれないと考えました。ですから、他の方法でも構いません。
DBからの保存と取得が機能していることを再確認したので、それは問題ではありません。
RingtonePreference
コードから値を設定するにはどうすればよいですか?
編集:ここで私がやりたいことを少し説明します。別の方法があるかもしれません。
ユーザーが着信音を選択できるメニューエントリがいくつかあります (カウントはユーザーごとに異なります)。着信音の選択は上記の xml で機能し、メニュー エントリの ID が とともに に渡されIntent
ますPreferenceActivity
。次に、着信音の URI がデータベースに保存されます。
エントリの 1 つが変更されると、ユーザーが行った着信音の選択に従ってアラームが再生されます。それで、彼はどちらが変わったかを知っています。今のところ問題ありません。
問題は、ユーザーが既に定義したエントリの着信音を変更したい場合です。ユーザーが以前に着信音 Foo を選択した場合、 をクリックするRingtonePreference
と、着信音 Foo が事前に選択されているはずです。これは重大なエラーではありません (グリッチのようなものです) が、それでも非常に厄介です。
私の知る限り、RingtonePreference
コードからデフォルトを事前に選択する方法はありませんか? それとも「ただ間違っている」のですか?
編集 2: わかりました、これを行う方法はないと思います。非常に奇妙な、アンドロイドコア。a を使用してPreference
値を取得することはできますが、値を戻すことはできません。本当に急いでいたに違いありません。コードからのチェックを許可してくれてうれしいCheckBoxPreference
です...