一种动态改变应用程序存储路径的方法
【技术领域】
[0001 ]本发明涉及Android系统技术领域,具体涉及一种动态改变应用程序存储路径的方法。
【背景技术】
[0002]Android系统内部存储是用户不插入外部存储卡都可以使用的存储介质。这部分存储空间是从Android Flash存储器(相当于电脑的硬盘)划分出来的一块存储区,用户可以用来保存照片,音乐等文件。Andro i d开机通过调用标准Linux系统函数mount,把内存存储区域挂载到目录/mnt/sdcard,用户可以通过/mnt/sdcard目录读取内部存储区域内容。Android系统外部存储卡就是用户为扩充存储空间加插入的一种存储介质,就是常见的TF卡,俗称内存卡。Android开机通过调用标准Linux系统函数mount,把外部存储卡挂载到目录/mnt/extsd,用户可以通过/mnt/extsd目录读取外部存储卡的内容。Android系统应用程序从存储角度包含三个部分:应用程序安装文件:就是程序的可执行文件,这部分数据可以保存到外部存储卡。应用程序内部数据:程序运行数据,包括数据库,缓存等文件。保存到目录/data/data/包名。这部分数据只能保存到/data/data目录下面,无法保存到外部存储卡。应用程序外部数据:包括游戏数据,图片等等,主要保存到挂载点的Android目录。这部分数据可以保存到外部存储卡。Android系统开机时在内部存储挂载点/mnt/sdcard创建.android_secure隐藏目录,用于保存内部存储卡的应用程序安装文件。但是Android系统不是直接操作.android_secure目录,而是把.android_secure目录挂载到/mnt/secure/asec,这样Android系统就通过操作/mnt/secure/asec挂载点保存内部存储卡的应用程序安装文件,以上是Android原生态的处理流程。
[0003]现有技术中手机或者平板选择应用程序数据默认存储路径的方法是交换挂载点,即选择应用程序数据保存到外部存储器时,交换外部存储器和内部内存器的挂载点,不过这个过程中需要对手机或者平板重启,而且不支持外部存储卡的热插拔。
【发明内容】
[0004]本发明要解决的技术问题在于,针对现有技术的不足,提供一种动态改变应用程序存储路径的方法,克服现有技术选择应用程序存储路径的方法需要重启设备才能予以确认的缺陷以及不支持外部存储卡热插拔的缺陷。
[0005]本发明为解决上述技术问题所采用的技术方案为:
[0006]—种动态改变应用程序存储路径的方法,包括步骤:
[0007]Al、设置存储路径系统属性,如果需要选取外部存储路径则所述存储路径系统属性的属性值设为第一属性值,如果需要选取内部存储路径则所述存储路径系统属性的属性值设为第二属性值;
[0008]A2、如果所述属性值为第二属性值,则获取内部存储路径并传递给应用程序;
[0009]A3、如果所述属性值为第一属性值,判断外部存储卡是否插入设备,如果所述外部存储卡没有插入设备,则将所述存储路径系统属性的属性值修改为第二属性值,获取内部存储路径并传递给所述应用程序;
[0010]A4、如果所述外部存储卡已插入设备,则判断所述应用程序是否属于可以使用外部存储卡存取数据的特定应用程序或者第三方可卸载程序,如果是则获取外部存储路径并传递给所述应用程序,否则将所述存储路径系统属性的属性值修改为第二属性值,获取内部存储路径并传递给所述应用程序。
[0011]根据本发明的实施例,所述步骤A2包括步骤:读取系统文件init.rc中系统属性EXTERNAL_STORAGE的属性值,该属性值为内部存储路径。
[0012]根据本发明的实施例,所述步骤A3包括步骤:调用系统服务MountService的接口函数getVolumeState,如果获取的状态值为MEDIA_M0UNTED,则判定外部存储卡已插入设备,否则判定所述外部存储卡没有插入设备。
[0013]根据本发明的实施例,所述步骤A3包括步骤:如果所述属性值为第二属性值,读取系统文件init.rc中系统属性EXTERNAL_STORAGE的属性值,该属性值为内部存储路径。
[0014]根据本发明的实施例,所述步骤A4包括步骤:读取配置文件install_locat1n_pkg.conf,如果所述应用程序的进程名位于其中则判定所述应用程序为特定应用程序。
[0015]根据本发明的实施例,所述步骤A4包括步骤:读取RunningAppProcessInf ο类对象的实例,如果其成员变量flags的值不是Applicat1nlnf0.FLAG_SYSTEM,则判定所述应用程序为第三方可卸载程序。
[0016]根据本发明的实施例,所述步骤A4包括步骤:读取系统文件init.rc中系统属性SECNDARY_STORAGE的属性值,该属性值为外部存储路径。
[0017]根据本发明的实施例,所述存储路径系统属性设为persist.sys.default.storage。
[0018]实施本发明的技术方案,具有以下有益效果:本发明在Android系统中增加系统属性persist.sys.default, storage,以该系统属性的属性值作为内部存储路径和外部存储路径的标识符,使得不同的应用程序可以依据该标识符快速确定当前的存储路径,本发明在支持动态选择存储路径的同时支持外部存储卡的热插拔,并根据应用程序的类型确定是否可以使用外部存储卡,本发明因此提高了动态选择存储路径的效率和用户友好性。
【附图说明】
[0019]下面通过参考附图并结合实例具体地描述本发明,本发明的优点和实现方式将会更加明显,其中附图所示内容仅用于对本发明的解释说明,而不构成对本发明的任何意义上的限制,在附图中:
[0020]图1为本发明流程图。
【具体实施方式】
[0021]如图1所示,本发明动态改变应用程序存储路径的方法,包括步骤:
[0022]S101、设置存储路径系统属性,如果需要选取外部存储路径则存储路径系统属性的属性值设为第一属性值,如果需要选取内部存储路径则存储路径系统属性的属性值设为第二属性值;
[0023]S102、如果属性值为第二属性值,则获取内部存储路径并传递给应用程序;
[0024]S103、如果属性值为第一属性值,判断外部存储卡是否插入设备,如果外部存储卡没有插入设备,则将存储路径系统属性的属性值修改为第二属性值,获取内部存储路径并传递给应用程序;
[0025]S104、如果外部存储卡已插入设备,则判断应用程序是否属于可以使用外部存储卡存取数据的特定应用程序或者第三方可卸载程序,如果是则获取外部存储路径并传递给应用程序,否则将存储路径系统属性的属性值修改为第二属性值,获取内