`
貌似掉线
  • 浏览: 260071 次
  • 性别: 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
分享到:
评论

相关推荐

    基于android数据备份恢复的一种实现.pdf

    【Android 数据备份恢复实现】 随着移动互联网的快速发展,Android设备上的数据变得日益重要,尤其是在3G时代,通讯录、日程、短信和邮件等数据的丢失可能会给用户带来极大困扰。针对这一问题,Android提供了数据...

    超级备份「Super Backup & Restore」V2.3.28 for Android Android 手机上最快的数据备份和还原工具.rar

    因此,对于Android用户而言,拥有一款高效可靠的数据备份与恢复工具至关重要。本文将详细解析名为“超级备份「Super Backup & Restore」V2.3.28”的应用,它是Android平台上的一款快速、全面的数据管理解决方案。 ...

    Android云终端的系统备份与还原方案.pdf

    Android云终端的系统备份与还原方案主要针对的是云课堂环境中Android云终端的稳定性问题。传统的计算机教室由于难以集中管理和维护,逐渐被云课堂取代,其中云终端作为学生终端,其数量大、功能丰富,因此系统的稳定...

    Android高级应用源码-通讯录+备份还原.zip

    【Android高级应用源码-通讯录+备份还原.zip】是一个包含Android应用程序源代码的压缩包,专注于实现通讯录管理和备份还原功能。这个项目对于开发者来说是深入理解Android平台上的通讯录操作、数据存储以及备份机制...

    Android手机通讯录备份恢复功能源码Excel

    在Android系统中,通讯录是用户的重要数据之一,包含了...通过以上步骤,我们可以构建一个完整的Android手机通讯录备份恢复功能。在实际开发中,还应考虑性能优化、数据加密安全等方面,确保用户数据的安全和高效处理。

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

    总之,这个项目提供了一个完整的从Android客户端到服务器端的数据备份和恢复解决方案,涵盖了移动开发、Web服务、数据库管理和数据传输等多个方面,对于学习和实践Android、JSON、SSM以及MySQL的开发者来说,是一个...

    Android笔记本小程序源码

    这种双备份策略提高了数据的可靠性,即使数据库出现问题,也能从文件中恢复笔记。 总的来说,这个Android笔记本小程序源码涵盖了许多核心的Android开发技术,包括用户认证、数据库管理、图片处理和文件系统交互。...

    安卓 android备份短信

    在安卓操作系统中,备份短信是一项重要的任务,尤其是对于那些经常收发...通过理解Android的系统备份功能和利用像BackupSMS这样的第三方应用,我们可以有效地管理和保护我们的短信数据,确保在任何情况下都能轻松恢复。

    Android钛备份功能源码

    通过深入研究这些方面,开发者不仅可以提升对Android系统和备份恢复机制的理解,还能为开发类似功能的应用提供宝贵的参考。同时,对于那些想要定制钛备份功能或者扩展其功能的开发者,源码分析是必不可少的步骤。

    android备份系统的短信

    在Android系统中,备份是确保用户数据安全的重要环节。标题提到的“android备份系统的短信”是指利用Android提供的备份服务来保存手机中的短信数据。本文将深入探讨如何通过系统内置的短信Content Provider获取短信...

    android 版本更新 同时清除旧版本数据

    这可以通过在AndroidManifest.xml文件中配置`<application>`标签的`android:allowBackup="false"`属性来实现,这样在安装新APK时,旧的数据将不会被备份和恢复。另外,可以添加清理代码到安装新版本前的逻辑中,例如...

    android系统手机人人网备份源码

    以上是对“android系统手机人人网备份源码”项目的主要知识点分析,这个项目不仅可以帮助开发者深入理解Android应用开发,还提供了一个实践网络数据备份和恢复功能的实例。通过学习和研究这个源码,可以提升在...

    NFC移动终端数据备份及恢复的方法和装置.zip

    在实际应用中,NFC备份方案可能需要配合特定的应用程序或服务,例如Google的Android Beam或Apple的AirDrop,它们提供了友好的用户界面和后台处理机制,使得数据备份和恢复更加便捷。 总的来说,NFC移动终端数据备份...

    静默安装,卸载,数据备份,还原工具类

    Android提供了`android.app.backup.BackupAgentHelper`和`android.app.backup.BackupManager`类来实现应用数据的备份和还原。开发者可以自定义备份策略,选择需要备份的数据,如SQLite数据库、SharedPreferences等。...

    abe.jar android备份文件提取工具-最新版

    它是一个实用工具,专门设计来帮助用户从Android设备的备份文件中恢复数据。这个工具可能使用了Java编程语言开发,因为文件扩展名是.jar,这通常是Java应用程序的归档文件。 在描述中,“android备份文件提取工具_...

    android-backup-extractor,Android备份提取器.zip

    在Android生态系统中,数据备份是至关重要的,尤其是在设备丢失或系统升级前确保个人数据安全的关键步骤。"android-backup-extractor"是一个专为Android用户设计的开源工具,它允许用户方便地提取和重新打包由ADB ...

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

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

    Android程序研发源码Android Gmail备份手机短信源码.rar

    这份名为"Android程序研发源码Android Gmail备份手机短信源码.rar"的压缩包文件包含了实现这一功能的源代码,让我们深入探讨一下其中涉及到的关键知识点。 1. Android SDK和编程环境: 开发Android应用需要Java或...

    backup-script,安卓手机,应用程序app数据备份恢复

    功能强:可备份恢复split apk 算法多:目前支持的压缩算法有 tar(默认) lz4 zstd。 速度快:即使使用zstd压缩算法速率依旧快速。 1. 已经root的安卓手机,安装mt文件管理器, 2. 将该zip解压到手机人意目录,可以...

Global site tag (gtag.js) - Google Analytics