mt6735 情景模式从更多铃声中选择Hangouts Call /Hangouts Messag...
时间:10-02
整理:3721RD
点击:
[Audio Profile]情景模式从更多铃声中选择Hangouts Call /Hangouts Message,无法设置成功
[DESCRIPTION]
Hangouts Call .ogg和Hangouts Message.ogg是铃声客制化中经常要添加的响铃类型,放在用户盘的ringtones文件夹中,目前发现通过“更多铃声”选项来设置来电铃声和通知铃声为Hangouts Call /Hangouts Message时,无法设置成功。
[SOLUTION]
一、 请修改RingtoneManager.Java 的 appendDrmToWhereClause()里的查询条件,将is_drm!=1 这个条件改成is_drm=0 或者is_drm 为Null的情况。因为hangouts-mesaage ,hangouts-vode0-call 这些铃声在database里的drm栏位是null,我们要过滤非DRM类型的铃声,应该是drm栏位为0或者为null的。
参考如下:
private String appendDrmToWhereClause() {
....
StringBuilder sb = new StringBuilder();
sb.append(" and ");
sb.append("(");
// check the extra information to judge that if the FL ringstones can be
shown in the list
// sb.append(MediaStore.Audio.Media.IS_DRM).append("!=1");/*comment this
line*/
sb.append(MediaStore.Audio.Media.IS_DRM).append("=0 or ");/*add this
line*/
sb.append(MediaStore.Audio.Media.IS_DRM).append(" is NULL");/*add this
line*/
Intent it = mActivity.getIntent();
if (it != null) {
// by default the extra value is METHOD_FL (1)
int extraValue = it.getIntExtra(EXTRA_DRM_LEVEL, DRM_LEVEL_FL);
if (extraValue == DRM_LEVEL_FL) {
sb.append(" or ")
.append(MediaStore.Audio.Media.DRM_METHOD)
.append("=" + DRM_LEVEL_FL);
}
}
sb.append(")");
return sb.toString();
}
二、 此修改后,会引入一个新的问题,即:在"铃声列表"和"更多铃声”中都显示出了Hangouts Call /Hangouts Message,应该只在一个地方显示,即list显示,"更多铃声”就不再显示了。
此问题原因如下:
在MediaScanner扫描文件时,判断到如果文件的路径含有Ringtones,则认为它是铃声,并将其在database的is_ringtone这个属性的栏位置为1,代码见mediaScanner.java中的doScanFile()方法。
情景模式的铃声列表查询铃声时,使用的过滤条件就是is_ringtone 为1的铃声,所以会将所有is_ringtone 为1的铃声过滤出来,Hangouts Call /Hangouts Message也会在“铃声列表“中被过滤出来,代码见ringtoneManager.java中的方法。
而当点击”更多铃声“时,会将放在手机用户盘和外部T卡上的所有音频文件都过滤出来,所以这时Hangouts Call /Hangouts Message也会在“更多铃声列表“中被过滤出来,代码见ringtonePickerActivity.java中 mRingtoneCLIckListener的onClick方法。
这就导致了铃声列表和“更多铃声”中都出现了这两首歌曲。
若只希望系统的铃声可以被搜索出来,而放在手机用户盘或者T卡上的其他铃声都不能显示在”铃声列表“,则可以将判断文件的路径定位为系统铃声的路径:
alps\php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\base\media\java\android\media\MediaScanner.java:
private static final String RINGTONES_DIR =
"/system/media/audio/ringtones/";
替换:
private static final String RINGTONES_DIR = "/ringtones/";
[DESCRIPTION]
Hangouts Call .ogg和Hangouts Message.ogg是铃声客制化中经常要添加的响铃类型,放在用户盘的ringtones文件夹中,目前发现通过“更多铃声”选项来设置来电铃声和通知铃声为Hangouts Call /Hangouts Message时,无法设置成功。
[SOLUTION]
一、 请修改RingtoneManager.Java 的 appendDrmToWhereClause()里的查询条件,将is_drm!=1 这个条件改成is_drm=0 或者is_drm 为Null的情况。因为hangouts-mesaage ,hangouts-vode0-call 这些铃声在database里的drm栏位是null,我们要过滤非DRM类型的铃声,应该是drm栏位为0或者为null的。
参考如下:
private String appendDrmToWhereClause() {
....
StringBuilder sb = new StringBuilder();
sb.append(" and ");
sb.append("(");
// check the extra information to judge that if the FL ringstones can be
shown in the list
// sb.append(MediaStore.Audio.Media.IS_DRM).append("!=1");/*comment this
line*/
sb.append(MediaStore.Audio.Media.IS_DRM).append("=0 or ");/*add this
line*/
sb.append(MediaStore.Audio.Media.IS_DRM).append(" is NULL");/*add this
line*/
Intent it = mActivity.getIntent();
if (it != null) {
// by default the extra value is METHOD_FL (1)
int extraValue = it.getIntExtra(EXTRA_DRM_LEVEL, DRM_LEVEL_FL);
if (extraValue == DRM_LEVEL_FL) {
sb.append(" or ")
.append(MediaStore.Audio.Media.DRM_METHOD)
.append("=" + DRM_LEVEL_FL);
}
}
sb.append(")");
return sb.toString();
}
二、 此修改后,会引入一个新的问题,即:在"铃声列表"和"更多铃声”中都显示出了Hangouts Call /Hangouts Message,应该只在一个地方显示,即list显示,"更多铃声”就不再显示了。
此问题原因如下:
在MediaScanner扫描文件时,判断到如果文件的路径含有Ringtones,则认为它是铃声,并将其在database的is_ringtone这个属性的栏位置为1,代码见mediaScanner.java中的doScanFile()方法。
情景模式的铃声列表查询铃声时,使用的过滤条件就是is_ringtone 为1的铃声,所以会将所有is_ringtone 为1的铃声过滤出来,Hangouts Call /Hangouts Message也会在“铃声列表“中被过滤出来,代码见ringtoneManager.java中的方法。
而当点击”更多铃声“时,会将放在手机用户盘和外部T卡上的所有音频文件都过滤出来,所以这时Hangouts Call /Hangouts Message也会在“更多铃声列表“中被过滤出来,代码见ringtonePickerActivity.java中 mRingtoneCLIckListener的onClick方法。
这就导致了铃声列表和“更多铃声”中都出现了这两首歌曲。
若只希望系统的铃声可以被搜索出来,而放在手机用户盘或者T卡上的其他铃声都不能显示在”铃声列表“,则可以将判断文件的路径定位为系统铃声的路径:
alps\php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\base\media\java\android\media\MediaScanner.java:
private static final String RINGTONES_DIR =
"/system/media/audio/ringtones/";
替换:
private static final String RINGTONES_DIR = "/ringtones/";