本文主要是介绍mt6735 默认alarm铃声在media database中的id改变后,如何将新的id更新到settings.db去?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
[DESCRIPTION] 维护铃声有三个database,即internal.db、external.db和settings.db,internal.db和external.db分别是手机的系统RAM存储和外部存储的database,存放有audio文件的相关属性,如id、title等,见下表: settings.db是维护系统设置的一些参数的存储,如下表: 其中settings.db中的valume字段里的值的最后的数字,指向的文件就是对应的internal.db或external.db中的_id这一项所表示的文件,如上图中settings.db中的alart_alerm右边的...media/9所指代的文件就是internal.db中的...Alarm_Classic.ogg的文件。其中alarm_alert即闹铃的默认铃声的key。 现在问题是:假如某些用户可能通过OTA升级或者其它方式将internal.db中的Alarm_Classic.ogg文件删除了,或者是该文件id发生了变化,这时候settings.db里的alarm_alert选项的valume所表示的id即9,其指代的文件就会不存在或者不是原来的文件。 如何解决这个问题呢? [SOLUTION] 由于目前alarm这边尚缺乏文件id发生变化时实时触发settings.db对应的key更新的机制,所以提一个临时的解决方案,供客户参考使用。其思路为:当发现默认铃声id不存在或者已经改变时,根据所要设置的default 铃声的title,在internal.db中找到该title文件的id项,然后将其更新到settings.db的相关的key value中。 在文件(如AlarmClockFragment.java,由客户根据自己需求合适安排)中,修改如下: 1. 定义: // start by mtk import android.provider.MediaStore; import android.provider.Settings; // end by mtk // start by mtk private ContentResolver mContentResolver; private static final String ALARM_RINGTONE_TITLE = "Oxygen";//需要用哪个文件作为默认,由客户自己指定 private static final String KEY_ALARM_ALERT = "alarm_alert"; //字段请自行斟酌 private static final String[] INTERNAL_COLUMNS = new String[] { //internal.db的id和title MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE }; private static final int ID_COLUMN_INDEX = 0; private static final int TITLE_COLUMN_INDEX = 1; // end by mtk 2.具体实现: // start by mtk long ringtoneId = 0; //文件在internal.db中的新的id String oldDefaultUri = null; String newDfaultUri = null; mContentResolver = getActivity().getContentResolver(); //创建internal.db的id和title的查询列表 final Cursor internalCursor = mContentResolver.query( MediaStore.Audio.Media.INTERNAL_CONTENT_URI, INTERNAL_COLUMNS, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); internalCursor.moveToPosition(-1); //在查询列表中寻找title等于给定的default title,即 "Oxygen"; while (internalCursor.moveToNext()) { String ringtoneTitle = internalCursor.getString(TITLE_COLUMN_INDEX); if (ringtoneTitle.equals(ALARM_RINGTONE_TITLE)) { ringtoneId = internalCursor.getLong(ID_COLUMN_INDEX); //得到更新后的id break; } } oldDefaultUri = Settings.System.getString(mContentResolver, KEY_ALARM_ALERT); newDfaultUri = oldDefaultUri.substring(0, oldDefaultUri.lastIndexOf("/") + 1) + String.valueOf(ringtoneId); // 得到了新的id: newDfaultUri= "content://media/internal/audio/media/23" setDefaultRingtone(newDfaultUri); //写到settings.db中 Settings.System.putString(mContentResolver, KEY_ALARM_ALERT,newDfaultUri); // end by mtk 验证结果: 注: 本文的title必须唯一对应一个文件,若对应多个文件,则需要改用其他字段。 资料来源:一牛网论坛 资料链接:MT6735 |
这篇关于mt6735 默认alarm铃声在media database中的id改变后,如何将新的id更新到settings.db去?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!