android4.4简单摘要
来源:互联网 发布:hadoop 数据清洗工具 编辑:程序博客网 时间:2024/06/05 22:39
-------------------------------------------------two ways build mp3 files into you phone-------------------------------------------------------------------
方式一:
A:在vendor下添加:
vendor\sprd\sprd_media\internal_media.mk://编译时会自动将文件拷贝到system/preloadmedia下。
vendor\sprd\sprd_media\media\1.mp3
internal_media.mk中的内容为:
LOCAL_PATH:= vendor/sprd/sprd_mediaPRODUCT_COPY_FILES += \$(LOCAL_PATH)/media/1.mp3:system/preloadmedia/xxx.mp3
当然想编译的时候能执行到该.mk文件,必须将该.mk路径添加到平台的全局.mk文件当中,这里我的全局.make文件路径为:
X:\mocor_sc9820\device\sprd\scx35l\sp9820w_6c10\sp9820w_6c10.mk,
将include vendor/sprd/sprd_media/internal_media.mk 添加至sp9820w_6c10.mk当中,这样就能编译执行到了。
方式二:
1.在X:\mocor_sc9820\zrevo\public-binary\packages.xml文件中添加mp3文件拷贝路径。
<package name="a40_ruiou_inlay_ring"> <file dst="system/preloadmedia/harer.mp3" src="project/a40/media/harer.mp3" /> </package>
2.编译系统会找到package name="a40_ruiou_inlay_ring”这个mp3资源路径, 是在当前project中customer_a40_xx02-ruio.cfg中被调用的
[a40_xx02-ruio-ruio]
CUSTOM_SP=BASE
packages=audio_para
wificonnectivity_cfg
bootsound
bootanimation
a40_ruiou_inlay_ring
3.在该路径下X:\mocor_sc9820\zrevo\public-binary\project\a40\media添加mp3原文件。
目前还在熟悉为什么上述两种方法拷贝文件,为什么还需要修改以下代码文件:
在frameworks/base/core/java/android/os/FileUtils.java文件中添加:
public class FileUtils { ........ public static boolean copyFolder(File srcFile, File destFile) { if (!srcFile.isDirectory()) { return false; } if (!destFile.exists() && !destFile.mkdirs()) { return false; } boolean result = true; File[] list = srcFile.listFiles(); if (list == null) { return result; } for (File f:list) { if (f.isDirectory()) { result &= copyFolder (f,new File(destFile,f.getName())); } else { result &= copyFile(f,new File(destFile,f.getName())); } } return result; } ........}
在packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerService.java文件中添加:
public class MediaScannerService extends Service implements Runnable{........ private static String PRELOAD_SRC = "/system/preloadmedia"; private static String PRELOAD_FLAG = "mediapreloaded"; .........private final class ServiceHandler extends Handler{ @Override public void handleMessage(Message msg) { Bundle arguments = (Bundle) msg.obj; String filePath = arguments.getString("filepath"); try { if (filePath != null) { IBinder binder = arguments.getIBinder("listener"); IMediaScannerListener listener = (binder == null ? null : IMediaScannerListener.Stub.asInterface(binder)); Uri uri = null; try { uri = scanFile(filePath, arguments.getString("mimetype")); } catch (Exception e) { Log.e(TAG, "Exception scanning file", e); } if (listener != null) { listener.scanCompleted(filePath, uri); } } else { String volume = arguments.getString("volume"); String[] directories = null; if (MediaProvider.INTERNAL_VOLUME.equals(volume)) { // scan internal media storage directories = new String[] { Environment.getRootDirectory() + "/media", }; } else if (MediaProvider.EXTERNAL_VOLUME.equals(volume)) { // scan external storage volumes /* SPRD: we scan external storage separately @{ */ //directories = mExternalStoragePaths; if (!getSharedPreferences(PRELOAD_FLAG, Context.MODE_PRIVATE) .getBoolean(PRELOAD_FLAG, false)) { if (doPreloadMedia(PRELOAD_SRC, Environment.getInternalStoragePath().getPath())) { getSharedPreferences(PRELOAD_FLAG, Context.MODE_PRIVATE).edit() .putBoolean(PRELOAD_FLAG, true).commit(); } } String path = arguments.getString("path"); if (path != null) { directories = new String[] {arguments.getString("path")}; } else { directories = mExternalStoragePaths; } /* @} */ } if (directories != null) { if (true) Log.d(TAG, "start scanning volume " + volume + ": " + Arrays.toString(directories)); scan(directories, volume); if (true) Log.d(TAG, "done scanning volume " + volume); } } } catch (Exception e) { Log.e(TAG, "Exception in handleMessage", e); } //stopSelf(msg.arg1); } }; private boolean doPreloadMedia(String src, String dst) { if (!android.os.FileUtils.copyFolder(new File(src), new File(dst))) { Log.e(TAG, "doPreloadMedia failed"); return false; } return true; }}}
-------------------------------------------------------------updata nv parameters----------------------------------------------------------------------------------
首先清楚一个概念:nv是什么:
Nv为非易失性数据,从字面意思可以理解作用。比如闹钟时间,设置好后,关机后,应该依然有效,则保存在Nv中。
Nv里面有射频相关的:包括发射接收等逻辑控制参数,温度补偿,校准参数等。以及音频相关参数Nv是必须保存的
可变数据,写在flash中。手机IO控制参数、充电耗流等电流控制等等。
其次:android中update了nv_parameter参数,通常会影响到那些功能和性能:
整机备份升级,开机、驻网、打电话。
最后给单个独立的分支项目update下nv参数:
在android4.4源码workspace文件夹下存在默认的nvitem.bin文件
在zrevo/public-binary/nvitem/nvitem.bin下也存在nvitem.bin文件
如果需要给单独的每个分支或者单独项目配置独立的NV_parameter,目前的做法是:
X:\mocor_sc9820\zrevo\a53a_xx02-ruiou\binary\uk\nvitem\下增加nvitem.bin文件就行。
其中路径中a53a_xx02-ruiou是当前项目分支名称
其中路径中UK是当前分支项目中子板级特定的资源指定文件名称。
-------------------------------------------------------------next----------------------------------------------------------------------------------
.....- android4.4简单摘要
- 多线程简单摘要!
- C语言简单摘要
- 简单的数据库摘要
- Maven简单学习摘要
- 摘要rxjava简单使用
- 项目经理的职责-简单摘要
- 关于潜意识的简单摘要
- Gallery的简单分析摘要
- Android通话记录CallLog简单摘要
- 简单查询(章节摘要)
- JavaIO简单摘要(一)
- JavaIO简单摘要(二)
- SOAP 摘要简单对象访问协议
- 消息摘要 简单的应用例子
- 消息摘要算法的简单汇总
- 简单的Java程序(章节摘要)
- 摘要JNI与NDK简单理解
- Linux系统目录结构
- android TextView 实现图文混排
- Python Basic
- linux tomcat web新开端口
- spring框架Proxy-代理模式(动态生成代理对象)
- android4.4简单摘要
- JVM运行时数据区
- 笔记
- Java学习轨迹【面向对象(2)】
- 转动的风扇
- 内部类
- 位运算
- 设计模式遵循的六大基本原则
- Qt通过UDP传图片,实现自定义分包和组包