Sound notification custom in mp3- How to do? Android Studio

Asked

Viewed 96 times

1

I’ve been learning to program for a few weeks, and I’m desperate! I’m stuck in this problem:

I put an option where the user can choose the Ringtone they want for messaging notifications, works perfect! But, I want to put my Ringtone in .mp3, and set as default.

I’ve been searching for days, and I still haven’t got an answer, the .mp3 I put it in the folder /raw

I’ll send the code I have, xml and Java.

pref_notification.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
>

<!-- A 'parent' preference, which enables/disables child preferences (below)
     when checked/unchecked. -->
<SwitchPreference
    android:textColor="@color/colorAccent"
    android:defaultValue="true"
    android:key="notifications_new_message"
    android:title="@string/pref_title_new_message_notifications" />

<!-- Allows the user to choose a ringtone in the 'notify' category. -->
<!-- NOTE: This preference will be enabled only when the checkbox above is checked. -->
<!-- NOTE: RingtonePreference's summary should be set to its value by the activity code. -->
**<RingtonePreference**
    android:defaultValue="content://settings/system/notification_sound"
    android:dependency="notifications_new_message"
    android:key="notifications_new_message_ringtone"
    android:ringtoneType="notification"
    android:title="@string/pref_title_ringtone" />

<!-- NOTE: This preference will be enabled only when the checkbox above is checked. -->
<SwitchPreference
    android:defaultValue="false"
    android:dependency="notifications_new_message"
    android:key="notifications_new_message_vibrate"
    android:title="@string/pref_title_vibrate" />

Ringtonepreference.java

public class RingtonePreference extends Preference implements
    PreferenceManager.OnActivityResultListener {

private static final String TAG = "RingtonePreference";

private int mRingtoneType;
private boolean mShowDefault;
private boolean mShowSilent;

private int mRequestCode;

public RingtonePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);

    final TypedArray a = context.obtainStyledAttributes(attrs,
            com.android.internal.R.styleable.RingtonePreference, defStyleAttr, defStyleRes);
    mRingtoneType = a.getInt(com.android.internal.R.styleable.RingtonePreference_ringtoneType,
            RingtoneManager.TYPE_RINGTONE);
    mShowDefault = a.getBoolean(com.android.internal.R.styleable.RingtonePreference_showDefault,
            true);
    mShowSilent = a.getBoolean(com.android.internal.R.styleable.RingtonePreference_showSilent,
            true);
    a.recycle();
}

public RingtonePreference(Context context, AttributeSet attrs, int defStyleAttr) {
    this(context, attrs, defStyleAttr, 0);
}

public RingtonePreference(Context context, AttributeSet attrs) {
    this(context, attrs, com.android.internal.+R.);
}

public RingtonePreference(Context context) {
    this(context, null);
}

/**
 * Returns the sound type(s) that are shown in the picker.
 * 
 * @return The sound type(s) that are shown in the picker.
 * @see #setRingtoneType(int)
 */
public int getRingtoneType() {
    return mRingtoneType;
}

/**
 * Sets the sound type(s) that are shown in the picker.
 * 
 * @param type The sound type(s) that are shown in the picker.
 * @see RingtoneManager#EXTRA_RINGTONE_TYPE
 */
public void setRingtoneType(int type) {
    mRingtoneType = type;
}

/**
 * Returns whether to a show an item for the default sound/ringtone.
 * 
 * @return Whether to show an item for the default sound/ringtone.
 */
public boolean getShowDefault() {
    return mShowDefault;
}

/**
 * Sets whether to show an item for the default sound/ringtone. The default
 * to use will be deduced from the sound type(s) being shown.
 * 
 * @param showDefault Whether to show the default or not.
 * @see RingtoneManager#EXTRA_RINGTONE_SHOW_DEFAULT
 */
public void setShowDefault(boolean showDefault) {
    mShowDefault = showDefault;
}

/**
 * Returns whether to a show an item for 'Silent'.
 * 
 * @return Whether to show an item for 'Silent'.
 */
public boolean getShowSilent() {
    return mShowSilent;
}

/**
 * Sets whether to show an item for 'Silent'.
 * 
 * @param showSilent Whether to show 'Silent'.
 * @see RingtoneManager#EXTRA_RINGTONE_SHOW_SILENT
 */
public void setShowSilent(boolean showSilent) {
    mShowSilent = showSilent;
}

@Override
protected void onClick() {
    // Launch the ringtone picker
    Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
    onPrepareRingtonePickerIntent(intent);
    PreferenceFragment owningFragment = getPreferenceManager().getFragment();
    if (owningFragment != null) {
        owningFragment.startActivityForResult(intent, mRequestCode);
    } else {
        getPreferenceManager().getActivity().startActivityForResult(intent, mRequestCode);
    }
}

/**
 * Prepares the intent to launch the ringtone picker. This can be modified
 * to adjust the parameters of the ringtone picker.
 * 
 * @param ringtonePickerIntent The ringtone picker intent that can be
 *            modified by putting extras.
 */
protected void onPrepareRingtonePickerIntent(Intent ringtonePickerIntent) {

    ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,
            onRestoreRingtone());

    ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, mShowDefault);
    if (mShowDefault) {
        ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI,
                RingtoneManager.getDefaultUri(getRingtoneType()));
    }

    ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, mShowSilent);
    ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, mRingtoneType);
    ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getTitle());
    ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
            AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
}

/**
 * Called when a ringtone is chosen.
 * <p>
 * By default, this saves the ringtone URI to the persistent storage as a
 * string.
 * 
 * @param ringtoneUri The chosen ringtone's {@link Uri}. Can be null.
 */
protected void onSaveRingtone(Uri ringtoneUri) {
    persistString(ringtoneUri != null ? ringtoneUri.toString() : "");
}

/**
 * Called when the chooser is about to be shown and the current ringtone
 * should be marked. Can return null to not mark any ringtone.
 * <p>
 * By default, this restores the previous ringtone URI from the persistent
 * storage.
 * 
 * @return The ringtone to be marked as the current ringtone.
 */
protected Uri onRestoreRingtone() {
    final String uriString = getPersistedString(null);
    return !TextUtils.isEmpty(uriString) ? Uri.parse(uriString) : null;
}

@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
    return a.getString(index);
}

@Override
protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValueObj) {
    String defaultValue = (String) defaultValueObj;

    /*
     * This method is normally to make sure the internal state and UI
     * matches either the persisted value or the default value. Since we
     * don't show the current value in the UI (until the dialog is opened)
     * and we don't keep local state, if we are restoring the persisted
     * value we don't need to do anything.
     */
    if (restorePersistedValue) {
        return;
    }

    // If we are setting to the default value, we should persist it.
    if (!TextUtils.isEmpty(defaultValue)) {
        onSaveRingtone(Uri.parse(defaultValue));
    }
}

@Override
protected void onAttachedToHierarchy(PreferenceManager preferenceManager) {
    super.onAttachedToHierarchy(preferenceManager);

    preferenceManager.registerOnActivityResultListener(this);
    mRequestCode = preferenceManager.getNextRequestCode();
}

public boolean onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == mRequestCode) {

        if (data != null) {
            Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);

            if (callChangeListener(uri != null ? uri.toString() : "")) {
                onSaveRingtone(uri);
            }
        }

        return true;
    }

    return false;
}

}
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.