can I make ringtone in preferences

白昼怎懂夜的黑 提交于 2019-12-08 09:14:48

问题


How can I make ringtone activity (that always appear in setting) so the user can choose her ringtone from system ringTones I googled it but I didn't find complete tutorial, I am really confused, please give me tutorial or some codes.

Also, if I want the user to choose the special ringtone to Notification in my application should i use Shared preference or preference?

I already did the Menu:

      // Menu Code Part#2
    public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.about:
  startActivity(new Intent(this, About.class));
    return true;
    case R.id.help:
  startActivity(new Intent(this, Help.class));
    return true;
    case R.id.setting:
   startActivity(new Intent(this, Setting.class));
        return true;
    default:
    return super.onOptionsItemSelected(item);
   }

回答1:


Full code:

res/xml/preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
      <PreferenceCategory
                android:title="Second Category">

        <RingtonePreference
                android:name="Ringtone Preference"
                android:summary="Select a ringtone"
                android:title="Ringtones"
                android:key="ringtonePref" />

</PreferenceCategory>
</PreferenceScreen>

Preferences.class

public class Preferences extends PreferenceActivity {
@Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                addPreferencesFromResource(R.xml.preferences); 

 }
}

Your code go here:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.about:
   // startActivity(new Intent(this, About.class));
    return true;
    case R.id.help:
    startActivity(new Intent(this, Help.class));
    return true;
    case R.id.setting:
    Intent settingsActivity = new Intent(getBaseContext(),
                                                Preferences.class);
                                startActivity(settingsActivity);


        return true;
    default:
    return super.onOptionsItemSelected(item);
    } 

To read these preferences from code, we should create a getPrefs() method, which we can call in the onStart() method. When we call it in the onStart() method instead of onCreate(), we can be sure that the preferences load when we have set them and returned to our main activity, The getPrefs() method could look like this:

String ringtonePreference;
// Get the xml/preferences.xml preferences
                SharedPreferences prefs = PreferenceManager
                                .getDefaultSharedPreferences(getBaseContext());
 ringtonePreference = prefs.getString("ringtonePref",
                                "DEFAULT_RINGTONE_URI");

androidmanifest.xml

<activity
        android:name=".Preferences"
        android:label="@string/set_preferences">
</activity>



回答2:


Yes, you can use SharedPreferences to store the URI of the ringtone the user selected. You can let the user select a ringtone using this:

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Ringtone");
if (mRingtoneUri != null) { 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(mRingtoneUri));
} else {
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null);
}
startActivityForResult(intent, RINGTONE_REQUEST);

The above code will prompt the user to select a ringtone from the system. When they select one, you will need to handle the Activity result:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RINGTONE_REQUEST && resultCode == RESULT_OK) {
        Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        SharedPreferences preferences = getSharedPreferences(PREF, MODE_PRIVATE);
        Editor editor = preferences.edit();
        if (uri == null)
            editor.putString(RINGTONE, null);
        else
            editor.putString(RINGTONE, uri.toString());
        editor.commit();
        if (uri == null)
            mRingtoneUri = null;
        else
            mRingtoneUri = uri.toString();
        }
    }
}

This code will save the URI of the ringtone to SharedPreferences.



来源:https://stackoverflow.com/questions/9650516/can-i-make-ringtone-in-preferences

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!