源码
7.1
问题:
1.系统编译过程对应的/system/media/audio资源来自?
例如:
build/target/product/full_base.mk
$(call inherit-product-if-exists, frameworks/base/data/sounds/AllAudio.mk)
也就是说,资源文件来自于frameworks/base/data/sounds,采用的是PRODUCT_COPY_FILES方式拷贝。
如果我们不想要某些资源,则直接修改mk中的项即可
2.系统启动后,怎么关联三方调用?
1)MediaProvider作为中介,供三方调用
packages\providers\MediaProvider
MediaScannerReceiver --- 通过监听系统广播,自启
MediaScannerService --- 启动并扫描对应的文件。例如system/media/audio里面的数据
注:
调用android.media.MediaScanner
MediaScannerService.ServiceHandler
directories = new String[] {
Environment.getRootDirectory() + "/media",
Environment.getOemDirectory() + "/media",
};//这里涉及system/media业务
也就是,三方想要调用/system/media/audio里面的资源,都是调用MediaProvider。例如Settings调用android.media.RingtonManager
2)音频资源的默认值怎么来?
android.media.MediaScanner
private static final String DEFAULT_RINGTONE_PROPERTY_PREFIX = "ro.config.";
private void setDefaultRingtoneFileNames() {
mDefaultRingtoneFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
+ Settings.System.RINGTONE);
mDefaultNotificationFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
+ Settings.System.NOTIFICATION_SOUND);
mDefaultAlarmAlertFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
+ Settings.System.ALARM_ALERT);
}
即
ro.config.ringtone
ro.config.notification_sound
ro.config.alarm_alert
网友评论