Update Preferences
Description
The following code shows how to Update Preferences.
Example
Register permission
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.java2s.myapplication3.app" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="com.java2s.myapplication3.app.READ_PREFERENCES" />
<uses-permission android:name="com.java2s.myapplication3.app.WRITE_PREFERENCES" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="java2s.com"
android:theme="@style/AppTheme" >
<activity
android:name="com.java2s.myapplication3.app.MainActivity"
android:label="java2s.com"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Main layout xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Show Settings"
android:onClick="onSettingsClick" />
<CheckBox
android:id="@+id/checkbox_enable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/button_settings"
android:text="Set Enable Setting"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical">
<TextView
android:id="@+id/value_enabled"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/value_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/value_selection"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
Java code
package com.java2s.myapplication3.app;
// w ww . j a v a2 s .c o m
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ContentValues;
import android.content.Intent;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnCheckedChangeListener {
public static final String SETTINGS_ACTION = "com.java2s.sharepreferences.ACTION_SETTINGS";
public static final Uri SETTINGS_CONTENT_URI =
Uri.parse("content://com.java2s.sharepreferences.settingsprovider/settings");
public static class SettingsColumns {
public static final String _ID = Settings.NameValueTable._ID;
public static final String NAME = Settings.NameValueTable.NAME;
public static final String VALUE = Settings.NameValueTable.VALUE;
}
TextView mEnabled, mName, mSelection;
CheckBox mToggle;
private ContentObserver mObserver = new ContentObserver(new Handler()) {
public void onChange(boolean selfChange) {
updatePreferences();
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEnabled = (TextView) findViewById(R.id.value_enabled);
mName = (TextView) findViewById(R.id.value_name);
mSelection = (TextView) findViewById(R.id.value_selection);
mToggle = (CheckBox) findViewById(R.id.checkbox_enable);
mToggle.setOnCheckedChangeListener(this);
}
@Override
protected void onResume() {
super.onResume();
updatePreferences();
getContentResolver().registerContentObserver(SETTINGS_CONTENT_URI, false, mObserver);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
ContentValues cv = new ContentValues(2);
cv.put(SettingsColumns.NAME, "preferenceEnabled");
cv.put(SettingsColumns.VALUE, isChecked);
getContentResolver().update(SETTINGS_CONTENT_URI, cv, null, null);
}
public void onSettingsClick(View v) {
try {
Intent intent = new Intent(SETTINGS_ACTION);
startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(this,
"You do not have the Settings App installed.",
Toast.LENGTH_SHORT).show();
}
}
private void updatePreferences() {
Cursor c = getContentResolver().query(SETTINGS_CONTENT_URI,
new String[] {SettingsColumns.NAME, SettingsColumns.VALUE},
null, null, null);
if (c == null) {
return;
}
while (c.moveToNext()) {
String key = c.getString(0);
if ("preferenceEnabled".equals(key)) {
mEnabled.setText( String.format("Enabled Setting = %s", c.getString(1)) );
mToggle.setChecked( Boolean.parseBoolean(c.getString(1)) );
} else if ("preferenceName".equals(key)) {
mName.setText( String.format("User Name Setting = %s", c.getString(1)) );
} else if ("preferenceSelection".equals(key)) {
mSelection.setText( String.format("Selection Setting = %s", c.getString(1)) );
}
}
c.close();
}
}