|
|
|
@ -37,16 +37,17 @@ import java.io.PrintStream;//导入 Java 的打印流(PrintStream)类,用于
|
|
|
|
|
|
|
|
|
|
//备份的处理
|
|
|
|
|
public class BackupUtils {
|
|
|
|
|
private static final String TAG = "BackupUtils";
|
|
|
|
|
private static final String TAG = "BackupUtils";//定义了一个私有的静态字符串常量 TAG,用于日志输出。
|
|
|
|
|
// Singleton stuff
|
|
|
|
|
private static BackupUtils sInstance;
|
|
|
|
|
private static BackupUtils sInstance;//定义了一个私有的静态成员变量 sInstance,表示单例对象。
|
|
|
|
|
|
|
|
|
|
public static synchronized BackupUtils getInstance(Context context) {
|
|
|
|
|
if (sInstance == null) {
|
|
|
|
|
if (sInstance == null) {
|
|
|
|
|
//如果当前备份不存在,则新声明一个
|
|
|
|
|
sInstance = new BackupUtils(context);
|
|
|
|
|
sInstance = new BackupUtils(context);//并将传入的上下文参数赋值给它
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return sInstance;
|
|
|
|
|
return sInstance;//。最后返回 sInstance。
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -63,38 +64,37 @@ public class BackupUtils {
|
|
|
|
|
public static final int STATE_SYSTEM_ERROR = 3;
|
|
|
|
|
// Backup or restore success成功存储
|
|
|
|
|
public static final int STATE_SUCCESS = 4;
|
|
|
|
|
|
|
|
|
|
private TextExport mTextExport;
|
|
|
|
|
//备份或恢复成功。
|
|
|
|
|
private TextExport mTextExport;//声明了一个私有成员变量 mTextExport,表示文本导出对象。
|
|
|
|
|
|
|
|
|
|
//初始化函数
|
|
|
|
|
private BackupUtils(Context context) {
|
|
|
|
|
mTextExport = new TextExport(context);
|
|
|
|
|
}
|
|
|
|
|
}//用于初始化 BackupUtils 对象
|
|
|
|
|
|
|
|
|
|
//外部存储功能是否可用
|
|
|
|
|
private static boolean externalStorageAvailable() {//外部存储功能是否可用
|
|
|
|
|
return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
|
|
|
|
|
}
|
|
|
|
|
}//用于检查外部存储是否可用。它通过比较外部存储的状态是否为 Environment.MEDIA_MOUNTED 来判断外部存储是否可用,并返回布尔值。
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
public int exportToText() {
|
|
|
|
|
return mTextExport.exportToText();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//用于导出数据到文本文件。该方法调用了 mTextExport 对象的 exportToText() 方法,并返回结果。
|
|
|
|
|
public String getExportedTextFileName() {
|
|
|
|
|
return mTextExport.mFileName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 用于获取导出的文本文件名。该方法返回 mTextExport 对象的 mFileName 属性。
|
|
|
|
|
public String getExportedTextFileDir() {
|
|
|
|
|
return mTextExport.mFileDirectory;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static class TextExport {
|
|
|
|
|
// 用于获取导出的文本文件目录。该方法返回 mTextExport 对象的 mFileDirectory 属性。 private static class TextExport {
|
|
|
|
|
private static final String[] NOTE_PROJECTION = {
|
|
|
|
|
NoteColumns.ID,
|
|
|
|
|
NoteColumns.MODIFIED_DATE,
|
|
|
|
|
NoteColumns.SNIPPET,
|
|
|
|
|
NoteColumns.TYPE
|
|
|
|
|
NoteColumns.ID,//表示笔记的唯一标识符。
|
|
|
|
|
NoteColumns.MODIFIED_DATE,//表示笔记的修改日期。
|
|
|
|
|
NoteColumns.SNIPPET,//表示笔记的摘要或片段。
|
|
|
|
|
NoteColumns.TYPE//表示笔记的类型。
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
private static final int NOTE_COLUMN_ID = 0;
|
|
|
|
@ -171,12 +171,16 @@ public class BackupUtils {
|
|
|
|
|
* Export note identified by id to a print stream
|
|
|
|
|
*/
|
|
|
|
|
private void exportNoteToText(String noteId, PrintStream ps) {
|
|
|
|
|
// 通过 mContext.getContentResolver().query() 方法查询数据库,获取与指定笔记 ID 相关的数据。
|
|
|
|
|
Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI,
|
|
|
|
|
DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] {
|
|
|
|
|
noteId
|
|
|
|
|
}, null);
|
|
|
|
|
|
|
|
|
|
if (dataCursor != null) { //利用光标来扫描内容,区别为callnote和note两种,靠ps.printline输出
|
|
|
|
|
// if (dataCursor != null) { //利用光标来扫描内容,区别为callnote和note两种,靠ps.printline输出
|
|
|
|
|
// 如果类型为 DataConstants.CALL_NOTE,则获取电话号码、通话时间、附件位置等信息,并使用 ps.println() 方法输出到文本文件中。
|
|
|
|
|
// 如果类型为 DataConstants.NOTE,则获取笔记内容信息,并使用 ps.println() 方法输出到文本文件中。
|
|
|
|
|
// 在每个笔记结束后,输出一行分隔符(由 Character.LINE_SEPARATOR, Character.LETTER_NUMBER 组成),以便区分不同笔记的内容
|
|
|
|
|
if (dataCursor.moveToFirst()) {
|
|
|
|
|
do {
|
|
|
|
|
String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE);
|
|
|
|
@ -211,7 +215,7 @@ public class BackupUtils {
|
|
|
|
|
dataCursor.close();
|
|
|
|
|
}
|
|
|
|
|
// print a line separator between note
|
|
|
|
|
try {
|
|
|
|
|
try {//如果在输出时发生异常,则会记录日志。
|
|
|
|
|
ps.write(new byte[] {
|
|
|
|
|
Character.LINE_SEPARATOR, Character.LETTER_NUMBER
|
|
|
|
|
});
|
|
|
|
|