default 铃声设置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lf12345678910/article/details/71747374
android/device/xxx/xxx/xxx.mk
android/frameworks/base/core/java/android/preference/RingtonePreference.java
android/frameworks/base/core/java/android/provider/Settings.java
android/frameworks/base/data/sounds/AllAudio.mk
android/frameworks/base/data/sounds/notifications/Mystery.mp3
android/frameworks/base/data/sounds/ringtones/VideoconJingle.ogg
android/frameworks/base/media/java/android/media/MediaScanner.java
android/frameworks/base/media/java/android/media/RingtoneManager.java
android/packages/apps/Mms/res/values/customize.xml
android/packages/apps/Mms/src/com/android/mms/ui/MessagingPreferenceActivity.java
android/packages/providers/MediaProvider/src/com/android/providers/media/RingtonePickerActivity.jav

PRODUCT_PROPERTY_OVERRIDES += \
    ro.config.ringtone=VideoconJingle.ogg \
    ro.config.notification_sound=Mystery.mp3 \
    ro.config.notification_sound_2=Mystery.mp3 \
    ro.config.notification_sound_3=Mystery.mp3 \
    ro.config.sms_notification=pixiedust.ogg \
    ro.config.alarm_alert=Alarm_Beep_01.ogg

mediaScanner.java 开机扫描手机所有多媒体文件(包括audio)等,

setDefaultRingtoneFileNames()  获取相关ro.config.* 属性值

public Uri doScanFile() 开始扫描并插入mediaprovider数据库中

扫描二维码关注公众号,回复: 6185711 查看本文章

xxx:/data/system/users/0 # ls
ls
appwidgets.xml           runtime-permissions.xml settings_system.xml
package-restrictions.xml settings_global.xml     wallpaper_info.xml
registered_services      settings_secure.xml

设置多媒体文件的uri进 settings_system.xml配置文件中

如:<setting id="47" name="ringtone" value="content://media/internal/audio/media/191" package="com.android.providers.media" />

        <setting id="48" name="ringtone_set" value="1" package="com.android.providers.media" />

private void setRingtoneIfNotSet(String settingName, Uri uri, long rowId) {
            if (wasRingtoneAlreadySet(settingName)) {
                return;
            }
            ContentResolver cr = mContext.getContentResolver();
            String existingSettingValue = Settings.System.getString(cr, settingName);
            if (TextUtils.isEmpty(existingSettingValue)) {
                final Uri settingUri = Settings.System.getUriFor(settingName);
                final Uri ringtoneUri = ContentUris.withAppendedId(uri, rowId);
                RingtoneManager.setActualDefaultRingtoneUri(mContext,
                        RingtoneManager.getDefaultType(settingUri), ringtoneUri);
            }
            Settings.System.putInt(cr, settingSetIndicatorName(settingName), 1);
 }

public static void setActualDefaultRingtoneUri(Context context, int type, Uri ringtoneUri) {
        final ContentResolver resolver = context.getContentResolver();

        String setting = getSettingForType(type);  // "content://settings/system/ringtone
        if (setting == null) return;
        Settings.System.putStringForUser(resolver, setting,
                ringtoneUri != null ? ringtoneUri.toString() : null, context.getUserId());

}

        public boolean putStringForUser(ContentResolver cr, String name, String value,
                final int userHandle) {
            try {
                Bundle arg = new Bundle();
                arg.putString(Settings.NameValueTable.VALUE, value);
                arg.putInt(CALL_METHOD_USER_KEY, userHandle);
                IContentProvider cp = lazyGetProvider(cr);
                cp.call(cr.getPackageName(), mCallSetCommand, name, arg);
            } catch (RemoteException e) {
                Log.w(TAG, "Can't set key " + name + " in " + mUri, e);
                return false;
            }
            return true;
        }

猜你喜欢

转载自blog.csdn.net/lf12345678910/article/details/71747374