Tutorial details

Android beginner tutorial: Part 81 - RingtonePreference | App Code for Sale | Preview

Android beginner tutorial: Part 81 - RingtonePreference | Android Tutorial

How to create and handle a RingtonePreference object

Overview PAGE TOP

In this part we will learn how to create and handle a RingtonePreference object.

A RingtonePreference is a settings item that lets the user pick a ringtone from their system. The selected ringtone's URI address is saved in the preferences file, which can then be used by the application.

Firstly go to preferences.xml file and add a new RingtonePreference object. The attributes we're going to set are android:key, android:title, android:summary, android:showDefault and android:showSilent. The first 3 were already used and explained in the previous tutorials, the last 2 are boolean values that determine whether the ringtone list should display the options to select default ringtone or set ringtone to silent.

<RingtonePreference
    android:key="pref_tone"
    android:title="@string/pref_tone"
    android:summary="@string/pref_tone_summ"
    android:showDefault="true"
    android:showSilent="true"/>

So far the preferences.xml file looks like this:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:key="pref_mute"
        android:title="@string/pref_mute"
        android:summary="@string/pref_mute_summ"
        android:defaultValue="false" />
    <EditTextPreference
        android:key="pref_textsize"
        android:title="@string/pref_textsize"
        android:dialogTitle="@string/pref_textsize_descr"
        android:summary="@string/pref_textsize_summ"
        android:defaultValue="14" />
    <ListPreference
        android:key="pref_theme"
        android:title="@string/pref_theme"
        android:dialogTitle="@string/pref_theme_descr"
        android:summary="@string/pref_theme_summ"
        android:entries="@array/theme_colors"
        android:entryValues="@array/theme_colors"
        android:defaultValue="Blue" />
    <RingtonePreference
        android:key="pref_tone"
        android:title="@string/pref_tone"
        android:summary="@string/pref_tone_summ"
        android:showDefault="true"
        android:showSilent="true"/>
</PreferenceScreen>

Here's the updated strings.xml file with the new string values:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">CodeForFood Test Two</string>
    <string name="pref_mute">Mute</string>
    <string name="pref_mute_summ">Disable all the sound in the application</string>
    <string name="pref_textsize">Text size</string>
    <string name="pref_textsize_descr">Enter text size</string>
    <string name="pref_textsize_summ">Set text size of the interface</string>
    <string name="pref_theme">Theme</string>
    <string name="pref_theme_descr">Pick a color</string>
    <string name="pref_theme_summ">Set the application\'s color theme</string>
    <string name="pref_tone">Ringtone</string>
    <string name="pref_tone_summ">Set ringtone</string>
    <string name="menu_settings">Settings</string>
    <string name="clear_settings">Reset settings</string>

</resources>

In the onResume() function of MainActivity.java, add a line that displays the URI of the ringtone:

Toast.makeText(this, "Ringtone: " + prefs.getString("pref_tone", "none"), Toast.LENGTH_SHORT).show();

Full class code looks like this:

package com.example.codeforfoodtest_two;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity{

static final int IDM_SETTINGS = 101;
public SharedPreferences prefs;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button btn_clear = (Button)findViewById(R.id.clearButton);
btn_clear.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Editor editor = prefs.edit();
editor.clear();
editor.commit();
onResume();
}
});
}

@Override
public void onResume(){
prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(prefs.getBoolean("pref_mute", false)){
Toast.makeText(this, "Muted!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "Not muted!", Toast.LENGTH_SHORT).show();
}
Toast.makeText(this, "Text size: " + prefs.getString("pref_textsize", "14"), Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Theme color: " + prefs.getString("pref_theme", "Blue"), Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Ringtone: " + prefs.getString("pref_tone", "none"), Toast.LENGTH_SHORT).show();

super.onResume();
}

@Override
public boolean onCreateOptionsMenu(Menu menu){
menu.add(Menu.NONE, IDM_SETTINGS, Menu.NONE, R.string.menu_settings);
return(super.onCreateOptionsMenu(menu));
}

@Override
public boolean onOptionsItemSelected(MenuItem item){
if(item.getItemId()==IDM_SETTINGS){
Intent intent = new Intent();
intent.setClass(this, TestPreferences.class);
startActivity(intent);
}
return true;
}
}

And that's it. If you test your application now, you'll see that there's a new preference item in the settings of your application.

The ringtone list lets you preview and select from default ringtones as well as the music library.

That's all for today!

Thanks for reading!

Reference PAGE TOP

http://kirill-poletaev.blogspot.it/2013/02/android-beginner-tutorial-part-81.html

0 Comments Leave a comment

Please login in order to leave a comment.

Newest first
!

Sign-in to your Chupamobile Account.

The Easiest way to Launch your next App or Game.

Join Chupamobile and get instant access to thousands of ready made App and Game Templates.

Creating an account means you’re okay with Chupamobile’s Terms of Service and Privacy Policy.