Setting the ringtone only for a specific application

I want to be able to set a ringtone that is only associated with a specific application. If a message appears with a special prefix, my application intercepts it and does whatever it needs to do. When a message arrives, I want to inform the user that a "special" message has appeared, via a ringtone (which plays exclusively on this message). anyone with lead please help.

+2


a source to share


1 answer


You can create a ringtone in your app and use it when any notification comes and plays the ringtone accordingly. below is the code to set ringtone for your application

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
    Uri defaultRingtoneUri = RingtoneManager.getDefaultUri(ringTonePref.getRingtoneType());
            String defaultRingtone = defaultRingtoneUri.toString();
            String selectedRingtone = ringTonePref.getPreferenceManager().getSharedPreferences()
                    .getString(NOTIFICATION_RINGTONE,defaultRingtone);
            if (defaultRingtone.equals(selectedRingtone)) {
                ringtoneUri = defaultRingtoneUri;
            } else {
                ringtoneUri = (TextUtils.isEmpty(selectedRingtone)) ? null : Uri.parse(selectedRingtone);
            }
            updateRingtoneSummary(ringTonePref, ringtoneUri);
            final Handler handler = new Handler() {
                @Override
                public void handleMessage(Message message) {
                    Uri defaultRingtoneUri = RingtoneManager.getDefaultUri(ringTonePref.getRingtoneType());
                    String defaultRingtone = defaultRingtoneUri.toString();
                    String selectedRingtone = ringTonePref.getPreferenceManager().getSharedPreferences()
                            .getString(NOTIFICATION_RINGTONE,defaultRingtone);
                    if (defaultRingtone.equals(selectedRingtone)) {
                        ringtoneUri = defaultRingtoneUri;
                    } else {
                        ringtoneUri = (TextUtils.isEmpty(selectedRingtone)) ? null : Uri.parse(selectedRingtone);
                    }
                    updateRingtoneSummary(ringTonePref, ringtoneUri);
                    super.handleMessage(message);
                }
            };
            ringTonePref.setOnPreferenceChangeListener(new OnPreferenceChangeListener (){
                public boolean onPreferenceChange(Preference arg0, Object arg1) {
                    handler.sendEmptyMessage(UPDATE_RINGTONE_SUMMARY);
                    return true;
                }
                });
        }


    private void updateRingtoneSummary(RingtonePreference ringtonePreference, final Uri ringtoneUri) {
                // Set the summary
                if (ringtoneUri == null) {
                    // The ringtone picker returns null for "silent" ringtone
                    ringtonePreference.setSummary(R.string.silent);
                } else {
                    Ringtone ringtone = RingtoneManager.getRingtone(this, ringtoneUri);
                    if (ringtone != null) {
                        ringtonePreference.setSummary(ringtone.getTitle(this));
                    }
                }
            }

      



preference.xml file

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

    <PreferenceCategory
            android:title="@string/notificationsettings">
                <RingtonePreference
                android:key="pref_key_ringtone"
                android:title="@string/title_list_preference"
                android:dialogTitle="@string/title_list_preference"
                android:defaultValue="content://settings/system/notification_sound"
                android:ringtoneType="notification" />

        <CheckBoxPreference
                android:key="pref_key_vibrate"
                android:title="@string/vibrate"
                android:defaultValue="true"/>
    </PreferenceCategory>

</PreferenceScreen>

      

+2


a source







All Articles