|
|
|
@ -14,34 +14,45 @@
|
|
|
|
*许可证下的限制。
|
|
|
|
*许可证下的限制。
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//包名
|
|
|
|
package net.micode.notes.tool;
|
|
|
|
package net.micode.notes.tool;
|
|
|
|
|
|
|
|
//包的调用
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Context
|
|
|
|
|
|
|
|
* 可以理解为一个接口(抽象类),它提供了有关应用程序的全局信息。从它继承或者从
|
|
|
|
|
|
|
|
* 它的直接或间接子类继承,那么继承的子类就可以拿到应用程序的全局信息。全局信息指:
|
|
|
|
|
|
|
|
* 它允许访问特定于应用程序的资源和类,以及对诸如启动活动,广播和接收意图等应用程序级操作的上调。
|
|
|
|
|
|
|
|
*/
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.database.Cursor;
|
|
|
|
import android.database.Cursor;
|
|
|
|
import android.os.Environment;
|
|
|
|
import android.os.Environment;
|
|
|
|
import android.text.TextUtils;
|
|
|
|
import android.text.TextUtils;
|
|
|
|
import android.text.format.DateFormat;
|
|
|
|
import android.text.format.DateFormat;
|
|
|
|
import android.util.Log;
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
|
|
//从本项目中的其他
|
|
|
|
import net.micode.notes.R;
|
|
|
|
import net.micode.notes.R;
|
|
|
|
import net.micode.notes.data.Notes;
|
|
|
|
import net.micode.notes.data.Notes;
|
|
|
|
import net.micode.notes.data.Notes.DataColumns;
|
|
|
|
import net.micode.notes.data.Notes.DataColumns;
|
|
|
|
import net.micode.notes.data.Notes.DataConstants;
|
|
|
|
import net.micode.notes.data.Notes.DataConstants;
|
|
|
|
import net.micode.notes.data.Notes.NoteColumns;
|
|
|
|
import net.micode.notes.data.Notes.NoteColumns;
|
|
|
|
|
|
|
|
//java自己的文件操作类
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.FileNotFoundException;
|
|
|
|
import java.io.FileNotFoundException;
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.PrintStream;
|
|
|
|
import java.io.PrintStream;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 数据备份读取和显示类,用于数据备份读取和显示
|
|
|
|
|
|
|
|
*/
|
|
|
|
public class BackupUtils {
|
|
|
|
public class BackupUtils {
|
|
|
|
private static final String TAG = "BackupUtils";
|
|
|
|
|
|
|
|
// Singleton stuff
|
|
|
|
|
|
|
|
private static BackupUtils sInstance; //类里面为什么可以定义自身类的对象?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final String TAG = "BackupUtils";
|
|
|
|
|
|
|
|
//实例化一个BackupUtiles对象
|
|
|
|
|
|
|
|
private static BackupUtils sInstance;
|
|
|
|
|
|
|
|
//同步线程锁,其他试图访问该方法的线程将受到阻塞
|
|
|
|
public static synchronized BackupUtils getInstance(Context context) {
|
|
|
|
public static synchronized BackupUtils getInstance(Context context) {
|
|
|
|
//ynchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A)
|
|
|
|
//Synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A)
|
|
|
|
//运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。
|
|
|
|
//运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。
|
|
|
|
//它包括两种用法:synchronized 方法和 synchronized 块。
|
|
|
|
//它包括两种用法:synchronized 方法和 synchronized 块。
|
|
|
|
if (sInstance == null) {
|
|
|
|
if (sInstance == null) {
|
|
|
|
@ -52,65 +63,103 @@ public class BackupUtils {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Following states are signs to represents backup or restore
|
|
|
|
* 下面定义了一些状态常量
|
|
|
|
* status
|
|
|
|
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
// Currently, the sdcard is not mounted SD卡没有被装入手机
|
|
|
|
// 代表SD卡没有被装入手机
|
|
|
|
public static final int STATE_SD_CARD_UNMOUONTED = 0;
|
|
|
|
public static final int STATE_SD_CARD_UNMOUONTED = 0;
|
|
|
|
// The backup file not exist 备份文件夹不存在
|
|
|
|
// 备份文件夹不存在
|
|
|
|
public static final int STATE_BACKUP_FILE_NOT_EXIST = 1;
|
|
|
|
public static final int STATE_BACKUP_FILE_NOT_EXIST = 1;
|
|
|
|
// The data is not well formated, may be changed by other programs 数据已被破坏,可能被修改
|
|
|
|
// 数据已被破坏,可能被修改
|
|
|
|
public static final int STATE_DATA_DESTROIED = 2;
|
|
|
|
public static final int STATE_DATA_DESTROIED = 2;
|
|
|
|
// Some run-time exception which causes restore or backup fails 超时异常
|
|
|
|
// 超时异常
|
|
|
|
public static final int STATE_SYSTEM_ERROR = 3;
|
|
|
|
public static final int STATE_SYSTEM_ERROR = 3;
|
|
|
|
// Backup or restore success 成功存储
|
|
|
|
// 成功存储
|
|
|
|
public static final int STATE_SUCCESS = 4;
|
|
|
|
public static final int STATE_SUCCESS = 4;
|
|
|
|
|
|
|
|
//实例化一个TextExport的对象mTextExport
|
|
|
|
private TextExport mTextExport;
|
|
|
|
private TextExport mTextExport;
|
|
|
|
|
|
|
|
|
|
|
|
private BackupUtils(Context context) { //初始化函数
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 初始化mTextExport
|
|
|
|
|
|
|
|
* @param context
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private BackupUtils(Context context) {
|
|
|
|
|
|
|
|
//初始化函数
|
|
|
|
mTextExport = new TextExport(context);
|
|
|
|
mTextExport = new TextExport(context);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static boolean externalStorageAvailable() { //外部存储功能是否可用
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 查询外部设备连接的情况,返回一个boolean类型的消息
|
|
|
|
|
|
|
|
* @return boolean
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private static boolean externalStorageAvailable() {
|
|
|
|
|
|
|
|
//外部存储功能是否可用
|
|
|
|
return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
|
|
|
|
return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 输出至文本
|
|
|
|
|
|
|
|
* @return 状态常量
|
|
|
|
|
|
|
|
*/
|
|
|
|
public int exportToText() {
|
|
|
|
public int exportToText() {
|
|
|
|
return mTextExport.exportToText();
|
|
|
|
return mTextExport.exportToText();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 获取输出文本的文件名
|
|
|
|
|
|
|
|
* @return 文件名
|
|
|
|
|
|
|
|
*/
|
|
|
|
public String getExportedTextFileName() {
|
|
|
|
public String getExportedTextFileName() {
|
|
|
|
return mTextExport.mFileName;
|
|
|
|
return mTextExport.mFileName;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 获取导出文本的春初路径
|
|
|
|
|
|
|
|
* @return 路径
|
|
|
|
|
|
|
|
*/
|
|
|
|
public String getExportedTextFileDir() {
|
|
|
|
public String getExportedTextFileDir() {
|
|
|
|
return mTextExport.mFileDirectory;
|
|
|
|
return mTextExport.mFileDirectory;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 内部类:文本输出定义笔记ID、修改日期等,
|
|
|
|
|
|
|
|
* 笔记、内容、日期、电话号码的数据和格式等常量
|
|
|
|
|
|
|
|
*/
|
|
|
|
private static class TextExport {
|
|
|
|
private static class TextExport {
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Note最基本的几个元素:
|
|
|
|
|
|
|
|
* Note的ID
|
|
|
|
|
|
|
|
* Note的最后一次修改日期
|
|
|
|
|
|
|
|
* Note内容的截取片段
|
|
|
|
|
|
|
|
* Note的类型
|
|
|
|
|
|
|
|
*/
|
|
|
|
private static final String[] NOTE_PROJECTION = {
|
|
|
|
private static final String[] NOTE_PROJECTION = {
|
|
|
|
NoteColumns.ID,
|
|
|
|
NoteColumns.ID,
|
|
|
|
NoteColumns.MODIFIED_DATE,
|
|
|
|
NoteColumns.MODIFIED_DATE,
|
|
|
|
NoteColumns.SNIPPET,
|
|
|
|
NoteColumns.SNIPPET,
|
|
|
|
NoteColumns.TYPE
|
|
|
|
NoteColumns.TYPE
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
//定义了一个数组储存的是数据的信息
|
|
|
|
private static final int NOTE_COLUMN_ID = 0;
|
|
|
|
private static final int NOTE_COLUMN_ID = 0;
|
|
|
|
|
|
|
|
//初始化变迁修改时间状态
|
|
|
|
private static final int NOTE_COLUMN_MODIFIED_DATE = 1;
|
|
|
|
private static final int NOTE_COLUMN_MODIFIED_DATE = 1;
|
|
|
|
|
|
|
|
//初始化小段消息状态
|
|
|
|
private static final int NOTE_COLUMN_SNIPPET = 2;
|
|
|
|
private static final int NOTE_COLUMN_SNIPPET = 2;
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 变量:定义字符串存储数据的基本信息
|
|
|
|
|
|
|
|
*/
|
|
|
|
private static final String[] DATA_PROJECTION = {
|
|
|
|
private static final String[] DATA_PROJECTION = {
|
|
|
|
|
|
|
|
//数据内容
|
|
|
|
DataColumns.CONTENT,
|
|
|
|
DataColumns.CONTENT,
|
|
|
|
|
|
|
|
//媒体类型
|
|
|
|
DataColumns.MIME_TYPE,
|
|
|
|
DataColumns.MIME_TYPE,
|
|
|
|
DataColumns.DATA1,
|
|
|
|
DataColumns.DATA1,
|
|
|
|
DataColumns.DATA2,
|
|
|
|
DataColumns.DATA2,
|
|
|
|
DataColumns.DATA3,
|
|
|
|
DataColumns.DATA3,
|
|
|
|
DataColumns.DATA4,
|
|
|
|
DataColumns.DATA4,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
*标识设定:数据内容标识为0;媒体类型标识为1;访问日期标识为2;电话号码标识为4;
|
|
|
|
|
|
|
|
*/
|
|
|
|
private static final int DATA_COLUMN_CONTENT = 0;
|
|
|
|
private static final int DATA_COLUMN_CONTENT = 0;
|
|
|
|
|
|
|
|
|
|
|
|
private static final int DATA_COLUMN_MIME_TYPE = 1;
|
|
|
|
private static final int DATA_COLUMN_MIME_TYPE = 1;
|
|
|
|
@ -118,16 +167,24 @@ public class BackupUtils {
|
|
|
|
private static final int DATA_COLUMN_CALL_DATE = 2;
|
|
|
|
private static final int DATA_COLUMN_CALL_DATE = 2;
|
|
|
|
|
|
|
|
|
|
|
|
private static final int DATA_COLUMN_PHONE_NUMBER = 4;
|
|
|
|
private static final int DATA_COLUMN_PHONE_NUMBER = 4;
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 文档格式标识:名称=>0;日期=>1;内容=>2
|
|
|
|
|
|
|
|
*/
|
|
|
|
private final String [] TEXT_FORMAT;
|
|
|
|
private final String [] TEXT_FORMAT;
|
|
|
|
private static final int FORMAT_FOLDER_NAME = 0;
|
|
|
|
private static final int FORMAT_FOLDER_NAME = 0;
|
|
|
|
private static final int FORMAT_NOTE_DATE = 1;
|
|
|
|
private static final int FORMAT_NOTE_DATE = 1;
|
|
|
|
private static final int FORMAT_NOTE_CONTENT = 2;
|
|
|
|
private static final int FORMAT_NOTE_CONTENT = 2;
|
|
|
|
|
|
|
|
//为该类定义一个私有的上下文类
|
|
|
|
private Context mContext;
|
|
|
|
private Context mContext;
|
|
|
|
|
|
|
|
//文件名
|
|
|
|
private String mFileName;
|
|
|
|
private String mFileName;
|
|
|
|
|
|
|
|
//文件路径
|
|
|
|
private String mFileDirectory;
|
|
|
|
private String mFileDirectory;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 构造函数,根据资源的格式获取存储的格式
|
|
|
|
|
|
|
|
* @param context
|
|
|
|
|
|
|
|
*/
|
|
|
|
public TextExport(Context context) {
|
|
|
|
public TextExport(Context context) {
|
|
|
|
TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note);
|
|
|
|
TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note);
|
|
|
|
mContext = context;
|
|
|
|
mContext = context;
|
|
|
|
@ -135,15 +192,22 @@ public class BackupUtils {
|
|
|
|
mFileDirectory = "";
|
|
|
|
mFileDirectory = "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 通过ID返回文件的格式信息
|
|
|
|
|
|
|
|
* @param id
|
|
|
|
|
|
|
|
* @return 文件格式
|
|
|
|
|
|
|
|
*/
|
|
|
|
private String getFormat(int id) { //获取文本的组成部分
|
|
|
|
private String getFormat(int id) { //获取文本的组成部分
|
|
|
|
return TEXT_FORMAT[id];
|
|
|
|
return TEXT_FORMAT[id];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Export the folder identified by folder id to text
|
|
|
|
* 通过查询parent id是文件夹id的note来选出制定ID文件夹下的Note
|
|
|
|
|
|
|
|
* @param folderId
|
|
|
|
|
|
|
|
* @param ps
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private void exportFolderToText(String folderId, PrintStream ps) {
|
|
|
|
private void exportFolderToText(String folderId, PrintStream ps) {
|
|
|
|
// Query notes belong to this folder 通过查询parent id是文件夹id的note来选出制定ID文件夹下的Note
|
|
|
|
//通过查询parent id是文件夹id的note来选出制定ID文件夹下的Note
|
|
|
|
Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI,
|
|
|
|
Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI,
|
|
|
|
NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] {
|
|
|
|
NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] {
|
|
|
|
folderId
|
|
|
|
folderId
|
|
|
|
@ -152,7 +216,7 @@ public class BackupUtils {
|
|
|
|
if (notesCursor != null) {
|
|
|
|
if (notesCursor != null) {
|
|
|
|
if (notesCursor.moveToFirst()) {
|
|
|
|
if (notesCursor.moveToFirst()) {
|
|
|
|
do {
|
|
|
|
do {
|
|
|
|
// Print note's last modified date ps里面保存有这份note的日期
|
|
|
|
// ps里面保存有这份note的日期
|
|
|
|
ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format(
|
|
|
|
ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format(
|
|
|
|
mContext.getString(R.string.format_datetime_mdhm),
|
|
|
|
mContext.getString(R.string.format_datetime_mdhm),
|
|
|
|
notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE))));
|
|
|
|
notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE))));
|
|
|
|
@ -166,49 +230,61 @@ public class BackupUtils {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Export note identified by id to a print stream
|
|
|
|
* 将便签的内容以文本的形式显示在屏幕上。比如电话号码、打电话的日期等
|
|
|
|
|
|
|
|
* @param noteId
|
|
|
|
|
|
|
|
* @param ps
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private void exportNoteToText(String noteId, PrintStream ps) {
|
|
|
|
private void exportNoteToText(String noteId, PrintStream ps) {
|
|
|
|
|
|
|
|
//利用光标来扫描内容,区别为callnote和note两种,靠ps.printline输出
|
|
|
|
Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI,
|
|
|
|
Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI,
|
|
|
|
DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] {
|
|
|
|
DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] {
|
|
|
|
noteId
|
|
|
|
noteId
|
|
|
|
}, null);
|
|
|
|
}, null);
|
|
|
|
|
|
|
|
//如果游标不空
|
|
|
|
if (dataCursor != null) { //利用光标来扫描内容,区别为callnote和note两种,靠ps.printline输出
|
|
|
|
if (dataCursor != null) {
|
|
|
|
|
|
|
|
//如果游标执行到第一步
|
|
|
|
if (dataCursor.moveToFirst()) {
|
|
|
|
if (dataCursor.moveToFirst()) {
|
|
|
|
do {
|
|
|
|
do {
|
|
|
|
|
|
|
|
//得到便签列的媒体类型,
|
|
|
|
String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE);
|
|
|
|
String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE);
|
|
|
|
|
|
|
|
//判断便签的内容,如果是电话记录,那么在这一个代码块内打印
|
|
|
|
if (DataConstants.CALL_NOTE.equals(mimeType)) {
|
|
|
|
if (DataConstants.CALL_NOTE.equals(mimeType)) {
|
|
|
|
// Print phone number
|
|
|
|
// 打印电话
|
|
|
|
String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER);
|
|
|
|
String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER);
|
|
|
|
|
|
|
|
//获取通话时间
|
|
|
|
long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE);
|
|
|
|
long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE);
|
|
|
|
|
|
|
|
//获取地址
|
|
|
|
String location = dataCursor.getString(DATA_COLUMN_CONTENT);
|
|
|
|
String location = dataCursor.getString(DATA_COLUMN_CONTENT);
|
|
|
|
|
|
|
|
//判断是否为空字符
|
|
|
|
if (!TextUtils.isEmpty(phoneNumber)) { //判断是否为空字符
|
|
|
|
if (!TextUtils.isEmpty(phoneNumber)) {
|
|
|
|
|
|
|
|
//输出电话号码phoneNumber
|
|
|
|
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
|
|
|
|
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
|
|
|
|
phoneNumber));
|
|
|
|
phoneNumber));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Print call date
|
|
|
|
// 输出 call date
|
|
|
|
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat
|
|
|
|
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat
|
|
|
|
.format(mContext.getString(R.string.format_datetime_mdhm),
|
|
|
|
.format(mContext.getString(R.string.format_datetime_mdhm),
|
|
|
|
callDate)));
|
|
|
|
callDate)));
|
|
|
|
// Print call attachment location
|
|
|
|
// 输出位置location
|
|
|
|
if (!TextUtils.isEmpty(location)) {
|
|
|
|
if (!TextUtils.isEmpty(location)) {
|
|
|
|
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
|
|
|
|
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
|
|
|
|
location));
|
|
|
|
location));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (DataConstants.NOTE.equals(mimeType)) {
|
|
|
|
} else if (DataConstants.NOTE.equals(mimeType)) {
|
|
|
|
|
|
|
|
//如果是便签的内容,那么直接输出便签里面包含的东西
|
|
|
|
String content = dataCursor.getString(DATA_COLUMN_CONTENT);
|
|
|
|
String content = dataCursor.getString(DATA_COLUMN_CONTENT);
|
|
|
|
if (!TextUtils.isEmpty(content)) {
|
|
|
|
if (!TextUtils.isEmpty(content)) {
|
|
|
|
|
|
|
|
//判断文本包中内容是否为空,若非空则将文本内容输出到打印输出流中
|
|
|
|
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
|
|
|
|
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
|
|
|
|
content));
|
|
|
|
content));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} while (dataCursor.moveToNext());
|
|
|
|
} while (dataCursor.moveToNext());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//关闭游标
|
|
|
|
dataCursor.close();
|
|
|
|
dataCursor.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// print a line separator between note
|
|
|
|
// 在note下面输出一条线
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
ps.write(new byte[] {
|
|
|
|
ps.write(new byte[] {
|
|
|
|
Character.LINE_SEPARATOR, Character.LETTER_NUMBER
|
|
|
|
Character.LINE_SEPARATOR, Character.LETTER_NUMBER
|
|
|
|
|