`
貌似掉线
  • 浏览: 255970 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android实现本程序数据的备份与恢复

阅读更多
本文原创,转载爬虫请保留原文地址:http://maosidiaoxian.iteye.com/blog/1488067

android中数据存储方式主要有四种,即SharePreferences,Sqlite3,文件和ContentProvider。所以要对本程序的数据进行备份,其实也就是把这些数据文件拷贝到另外的目录,在恢复时再拷贝回来。
以下以我的一个程序为例,其中使用了SharePreferences及sqlite3两个数据存储的方法。在备份时将其拷到SD卡,恢复时再拷贝回来。由于对文件流的操作在这里不是我应该关注的地方,于是直接用了apache开源项目commons中的IO包里的FileUtils类的方法。
在使用过程中,发现直接复制到手机中结果是操作失败,不知道是不是我权限没有添加上。不过复制到SD卡上却是成功的。
下面的ApkInfo及ResourceUtil是我自己封装的,顾名思义,里面包含程序的图标、包名、程序名等等一系列信息,所在的包放在了google code(http://code.google.com/p/cfuture-androidkit/)有sourceforge(http://sourceforge.net/projects/cf-androidkit/files/)中。
备份与恢复的代码如下:
/*
 * @(#)Backup.java		       Project:UniversityTimetable
 * Date:2012-4-16
 *
 * Copyright (c) 2011 CFuture09, Institute of Software, 
 * Guangdong Ocean University, Zhanjiang, GuangDong, China.
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.lurencun.cfuture09.universityTimetable.backup.util;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

import android.content.Context;
import android.os.Environment;
import android.widget.Toast;

import com.sinaapp.msdxblog.androidkit.util.ResourceUtil;
import com.sinaapp.msdxblog.androidkit.util.entity.ApkInfo;

/**
 * @author Geek_Soledad (66704238@51uc.com)
 */
public class Backup {

	private String SHARED_PREFS;
	private String DATABASES;
	private String APP_PATH;
	private Context mContext;
	private String BACKUP_PATH;
	private String BACKUP_DATABASES;
	private String BACKUP_SHARED_PREFS;

	public Backup(Context context) {
		mContext = context;
		ApkInfo apkInfo = new ResourceUtil(context).getApkInfo();
		APP_PATH = new StringBuilder("/data/data/").append(apkInfo.packageName)
				.toString();
		SHARED_PREFS = APP_PATH + "/shared_prefs";
		DATABASES = APP_PATH + "/databases";
		if (Environment.MEDIA_MOUNTED.equals(Environment
				.getExternalStorageState())) {
			BACKUP_PATH = "/sdcard/lurencun/backup";
		} else {
			BACKUP_PATH = "/com.lurencun/backup/";
			Toast.makeText(mContext, "没有检测到SD卡,可能无法备份成功", Toast.LENGTH_SHORT)
					.show();
		}
		BACKUP_PATH += apkInfo.packageName;
		BACKUP_DATABASES = BACKUP_PATH + "/database";
		BACKUP_SHARED_PREFS = BACKUP_PATH + "/shared_prefs";
	}

	/**
	 * 备份文件
	 * 
	 * @return 当且仅当数据库及配置文件都备份成功时返回true。
	 */
	public boolean doBackup() {
		return backupDB() && backupSharePrefs();
	}

	private boolean backupDB() {
		return copyDir(DATABASES, BACKUP_DATABASES, "备份数据库文件成功:"
				+ BACKUP_DATABASES, "备份数据库文件失败");
	}

	private boolean backupSharePrefs() {
		return copyDir(DATABASES, BACKUP_DATABASES, "备份配置文件成功:"
				+ BACKUP_SHARED_PREFS, "备份配置文件失败");
	}

	/**
	 * 恢复
	 * 
	 * @return 当且仅当数据库及配置文件都恢复成功时返回true。
	 */
	public boolean doRestore() {
		return restoreDB() && restoreSharePrefs();
	}

	private boolean restoreDB() {
		return copyDir(BACKUP_DATABASES, DATABASES, "恢复数据库文件成功", "恢复数据库文件失败");
	}

	private boolean restoreSharePrefs() {
		return copyDir(BACKUP_SHARED_PREFS, SHARED_PREFS, "恢复配置文件成功",
				"恢复配置文件失败");
	}

	private final void showToast(String msg) {
		Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
	}

	/**
	 * 复制目录
	 * 
	 * @param srcDir
	 *            源目录
	 * @param destDir
	 *            目标目录
	 * @param successMsg
	 *            复制成功的提示语
	 * @param failedMsg
	 *            复制失败的提示语
	 * @return 当复制成功时返回true, 否则返回false。
	 */
	private final boolean copyDir(String srcDir, String destDir,
			String successMsg, String failedMsg) {
		try {
			FileUtils.copyDirectory(new File(srcDir), new File(destDir));
		} catch (IOException e) {
			e.printStackTrace();
			showToast(failedMsg);
			return false;
		}
		showToast(successMsg);
		return true;
	}
}
0
1
分享到:
评论

相关推荐

    NM管理器-TWRP刷机备份管理器

     *还原应用程序+数据备份。  *从备份中恢复文本消息。  *从备份中恢复通话记录。  *从备份还原WiFi接入点(临)。  *恢复从备份(专业版)的蓝牙数据。  *恢复用户从备份(临)字词典。  *恢复备份(临...

    基于android手机通讯录的设计与实现的毕业论文

    - 实现通讯录数据的备份和恢复功能,以便在需要时可以轻松地还原数据。 - 提供联系人信息的分类和分组功能,方便用户根据自己的需求进行管理和查找。 - 集成社交网络功能,使用户可以将通讯录中的联系人信息与社交...

    钛备份 Titanium Backup v3.8.6 捐赠版 for android -- 安卓 天涯浪子

    钛备份 Titanium Backup,备份你的程序及程序数据,并支持定时备份等功能。 功能很强大,有此软件,不管你的格机还是重刷ROM,在重装软件时都是无痛的,非实适用经常捣鼓手机有机友! 免费版功能: * 无时间限制 *...

    Android+Json+SSM+MySQL模拟云备份云恢复:源码

    本资源是使用Android+Json+SSM和MySQL进行数据后台交互,模拟云备份云恢复的一个程序,包括了源码的数据库建表文件,读者可自行执行

    AndroidGeek-"Android极客"一个专门为Android程序猿打造的极客应用。主要包括: 干货笔记、GitHub Trending、密码管理 ........zip

    "Android极客"一个专门为Android程序猿打造的极客应用截图 主要功能密码管理Github Trending,搜索干货笔记......主要技术MVP架构Retrofit OkhttpRxJava RxAndroidEventBusGlideDagger2Material ...

    安卓钛备份

    可以根据设置和需求,对整个系统或者部分软件进行备份和还原,以免误操作造成的系统损坏和软件损坏,它不仅能够备份手机上的所有程序,还能保存每个程序的数据、Android市场链接等等。十分强大,大大减少了恢复系统...

    oandbackup:android的备份管理器

    一次备份和还原单个程序,并支持多个程序的批量备份和还原(静默/无人值守还原)。 恢复系统应用程序应该是可能的,而无需随后重新启动。 oandbackup还可以卸载系统应用程序。 以这种方式处理系统应用程序取决于...

    数据恢复器hexamobrecoverypr 3.5

    少有的一款能在android设备上进行数据恢复的工具,如果手机内存比较大,一般在进行数据扫描时需要花费较长的时间,恢复文档可能比较有效,图片和音视频类的文件恢复后可能也是一个已损坏的文件,急于从手机上恢复...

    超级备份 Super Backup Pro 2.2.80 中文多语免费版.zip

    Android 上最快的数据备份工具!您可以将应用程序和联系人,短信和通话记录,书签和日历备份到 SD 卡/Gmail。您再也不会丢失数据!这是超级备份的免费无广告版本,如果您需要经常对手机系统中的重要数据进行备份,您...

    cbackup是用于根目录下的Android设备的简单备份/还原脚本。-Android开发

    它备份应用程序,完整的应用程序数据以及一些Android元数据。 cbackup cbackup是针对已扎根的Android设备的简单备份/还原脚本。 它备份应用程序,完整的应用程序数据以及一些Android元数据。 快速入门在Termux中运行...

    Importer:适用于Android的应用程序,可帮助导入SMS,该应用程序由Sony支持的PC Companion备份

    该应用程序正在解决的主要问题是:当您备份PC Companion制作的数据时,然后将android降级。 PC Companion无法还原备份。 至于我有Android 5,想降级到4.4。 我已经进行了备份,迁移到4.4,然后尝试还原备份。 但是PC...

    Titanium_Backup_Pro_Donate_v8.4.0.2.apk

    [✔]更改设备的Android ID,可从备份中恢复出厂设置或将其恢复为出厂设置 [✔]保护备份以防删除 [✔]发送备份(至电子邮件/云)并在1中单击导入 [✔]备份→验证→卸载一口气的应用程序 [✔]只需单击即可冻结/...

    android开发秘籍

    11.5.3 秘诀97:触发备份与还原操作 249 11.6 android 的动画功能 250 第12 章 调试 255 12.1 eclipse 内置的调试工具 255 12.1.1 秘诀99:设置运行配置 255 12.1.2 秘诀100:使用ddms 256 12.1.3 秘诀101:...

    基于Android的高校学习社区APP的设计与实现.zip

    “基于Android的高校学习社区APP的设计与实现”是一款专为大学生设计的移动应用程序,旨在提供一个便捷的学习交流平台。该APP通过整合各种学习资源,为学生提供了一个集课程学习、知识分享、学术交流于一体的环境。...

    android手机安全卫士

    电话短信备份和还原. 保护手机的数据和通讯安全。 软件管理: 系统软件和本地软件,可以显示软件的详细信息,启动,删除应用程序.连接获取服务器上软件的评分信息等功能。程序锁可以指定要保护的程序, 用户进入要保护...

    ADB-Backup-APK-Injection:Android ADB备份APK注入POC

    Android操作系统通过ADB实用程序提供了已安装软件包的备份/还原机制。 默认情况下,将对应用程序进行完整备份,包括/ data中存储的私有文件,但是可以通过实现类来自定义此行为。 这样,应用程序可以使用自定义文件...

    基于Android的药材管理作业.zip

    数据备份与恢复:为防止数据丢失,应用支持数据的备份与恢复功能,确保信息安全。界面设计上,该应用采用直观的用户界面,操作简洁明了,便于用户快速上手。在配色和布局方面,通常会考虑易用性和美观性的结合,以...

    线刷Ruu更新实用程序

    建议您使用 PC 同步工具将 Android 手机上的个人数据备份到电脑上。 2. 在电脑上运行 ROM 更新实用程序 (RUU) 将 ROM 更新安装到 Android 手机上。(下一节内容将详细介绍如何安装 ROM 更新)。 3. 使用 PC 同步工具将...

    数据恢复 Hexamob Recovery PRO v5.01

    软件类别:备份还原 软件大小:10.7 MB 适用固件:2.2及更高固件 内置广告:没有广告 适用平台:Android 一款Android专用的数据恢复软件,使用智能手机和电脑一样,最让人担心的莫过于误删东西,那个时候抓狂啊,...

    Swift Backup 钛备份 v4.2.3高级版

    应用数据:将大多数应用程序恢复到与备份时相同的状态 特殊应用数据:如授予的权限、电池优化设置、应用的 Magisk 隐藏状态、SSAIDs 等 WiFi 网络配置 等等~~ 另外只有在已 root 或运行 Shizuku 时才能批量恢复...

Global site tag (gtag.js) - Google Analytics