можно сделать рингтон в настройках - PullRequest
0 голосов
/ 11 марта 2012

Как я могу активировать мелодию звонка (которая всегда отображается в настройках), чтобы пользователь мог выбрать ее мелодию звонка из системных мелодий звонка Я прогуглил ее, но я не нашел полный учебник, я действительно запутался, дайте мне учебник или некоторые коды.

Кроме того, если я хочу, чтобы пользователь выбрал специальную мелодию для уведомлений в моем приложении, должен ли я использовать общую настройку или настройку?

Я уже сделал меню:

      // 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);
   }

Ответы [ 2 ]

6 голосов
/ 11 марта 2012

Полный код:

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); 

 }
}

Ваш код находится здесь:

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);
    } 

Чтобы прочитать эти предпочтения из кода, мы должны создать метод getPrefs(), который мы можем вызвать в методе onStart().Когда мы вызываем его в методе onStart() вместо onCreate(), мы можем быть уверены, что настройки загружаются, когда мы установили их и вернулись к основному виду деятельности. Метод getPrefs() может выглядеть следующим образом:

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>
1 голос
/ 11 марта 2012

Да, вы можете использовать SharedPreferences для сохранения URI мелодии, выбранной пользователем. Вы можете позволить пользователю выбрать мелодию звонка, используя это:

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);

Приведенный выше код предложит пользователю выбрать мелодию звонка из системы. Когда они выберут один, вам нужно будет обработать результат Activity:

@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();
        }
    }
}

Этот код сохранит URI рингтона в SharedPreferences.

...