208 lines
7.3 KiB
Java
208 lines
7.3 KiB
Java
package com.aoleyun.sn.rlog;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.content.ContentValues;
|
|
import android.content.Context;
|
|
import android.database.Cursor;
|
|
import android.database.sqlite.SQLiteDatabase;
|
|
import android.os.Environment;
|
|
import android.util.Log;
|
|
|
|
import androidx.core.content.ContextCompat;
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.ArrayList;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
|
|
public class LogDBManager {
|
|
@SuppressLint("StaticFieldLeak")
|
|
private static LogDBManager sInstance;
|
|
private Context mContext;
|
|
private LogDBHelper mDBHelper;
|
|
|
|
private static final String TABLE_NAME = "logtable";
|
|
private static String TAG = "LogDBManager";
|
|
|
|
private LogDBManager(Context context) {
|
|
if (context == null) {
|
|
throw new RuntimeException("Context is NULL");
|
|
}
|
|
mContext = context;
|
|
mDBHelper = new LogDBHelper(context);
|
|
}
|
|
|
|
public static void init(Context context) {
|
|
if (sInstance == null) {
|
|
sInstance = new LogDBManager(context);
|
|
}
|
|
}
|
|
|
|
public static LogDBManager getInstance() {
|
|
if (sInstance == null) {
|
|
throw new IllegalStateException("You must be init LogDBManager first");
|
|
}
|
|
return sInstance;
|
|
}
|
|
|
|
public LogDBHelper getDBHelper() {
|
|
if (mDBHelper == null) {
|
|
mDBHelper = new LogDBHelper(mContext);
|
|
}
|
|
return mDBHelper;
|
|
}
|
|
|
|
private static final String LOG_CODE_REBOOT = "1001";
|
|
private static final String LOG_CODE_NETWORK = "1002";
|
|
private static final String LOG_CODE_NETCHANGE = "1003";
|
|
|
|
private static final String LOG_EVENT_REBOOT = "设备重启";
|
|
private static final String LOG_EVENT_NETWORK = "首次联网";
|
|
private static final String LOG_EVENT_NETCHANGE = "网络改变";
|
|
public static final String LOG_EVENT_BATTERY = "充电改变";
|
|
|
|
public void creatRebootLog(String operate, String content) {
|
|
LogBean logBean = new LogBean();
|
|
logBean.setCode(LOG_CODE_REBOOT);
|
|
logBean.setTimestamp(System.currentTimeMillis());
|
|
logBean.setEvent(LOG_EVENT_REBOOT);
|
|
logBean.setOperate(operate);
|
|
logBean.setContent(content);
|
|
saveLog(logBean);
|
|
}
|
|
|
|
public void creatNetworktLog(String operate, String content) {
|
|
LogBean logBean = new LogBean();
|
|
logBean.setCode(LOG_CODE_NETWORK);
|
|
logBean.setTimestamp(System.currentTimeMillis());
|
|
logBean.setEvent(LOG_EVENT_NETWORK);
|
|
logBean.setOperate(operate);
|
|
logBean.setContent(content);
|
|
saveLog(logBean);
|
|
}
|
|
|
|
public void creatNetChangeLog(String operate, String content) {
|
|
LogBean logBean = new LogBean();
|
|
logBean.setCode(LOG_CODE_NETCHANGE);
|
|
logBean.setTimestamp(System.currentTimeMillis());
|
|
logBean.setEvent(LOG_EVENT_NETCHANGE);
|
|
logBean.setOperate(operate);
|
|
logBean.setContent(content);
|
|
saveLog(logBean);
|
|
}
|
|
|
|
public void creatOtherLog(String event, String operate, String content) {
|
|
LogBean logBean = new LogBean();
|
|
logBean.setCode("0000");
|
|
logBean.setTimestamp(System.currentTimeMillis());
|
|
logBean.setEvent(event);
|
|
logBean.setOperate(operate);
|
|
logBean.setContent(content);
|
|
saveLog(logBean);
|
|
}
|
|
|
|
|
|
public void saveLog(LogBean logBean) {
|
|
SQLiteDatabase db = mDBHelper.getWritableDatabase();
|
|
ContentValues values = new ContentValues();
|
|
values.put("code", logBean.getCode());
|
|
values.put("timestamp", logBean.getTimestamp());
|
|
values.put("event", logBean.getEvent());
|
|
values.put("operate", logBean.getOperate());
|
|
values.put("content", logBean.getContent());
|
|
db.insert(TABLE_NAME, null, values);
|
|
}
|
|
|
|
public void delete(Integer id) {
|
|
SQLiteDatabase db = mDBHelper.getWritableDatabase();
|
|
db.delete(TABLE_NAME, "id=?", new String[]{id.toString()});
|
|
}
|
|
|
|
public void deleteAll() {
|
|
SQLiteDatabase db = mDBHelper.getWritableDatabase();
|
|
db.delete(TABLE_NAME, "", null);
|
|
}
|
|
|
|
public void update(LogBean logBean) {
|
|
SQLiteDatabase db = mDBHelper.getWritableDatabase();
|
|
ContentValues values = new ContentValues();
|
|
values.put("code", logBean.getCode());
|
|
values.put("timestamp", logBean.getTimestamp());
|
|
values.put("event", logBean.getEvent());
|
|
values.put("operate", logBean.getOperate());
|
|
values.put("content", logBean.getContent());
|
|
db.update(TABLE_NAME, values, "id=?", new String[]{logBean.getId().toString()});
|
|
}
|
|
|
|
private long aWeekDayTime = 1000 * 60 * 60 * 24 * 7;
|
|
|
|
public List<LogBean> getLogList() {
|
|
List<LogBean> logBeanList = new ArrayList<>();
|
|
SQLiteDatabase db = mDBHelper.getReadableDatabase();
|
|
long time = System.currentTimeMillis() - aWeekDayTime;
|
|
String sql = "select * from " + TABLE_NAME + " where" + " timestamp > " + time;
|
|
Cursor cursor = null;
|
|
try {
|
|
cursor = db.rawQuery(sql, null);
|
|
while (cursor.moveToNext()) {
|
|
LogBean logBean = new LogBean();
|
|
logBean.setId(cursor.getInt(cursor.getColumnIndex("id")));
|
|
logBean.setCode(cursor.getString(cursor.getColumnIndex("code")));
|
|
logBean.setTimestamp(cursor.getLong(cursor.getColumnIndex("timestamp")));
|
|
logBean.setEvent(cursor.getString(cursor.getColumnIndex("event")));
|
|
logBean.setOperate(cursor.getString(cursor.getColumnIndex("operate")));
|
|
logBean.setContent(cursor.getString(cursor.getColumnIndex("content")));
|
|
logBeanList.add(logBean);
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
} finally {
|
|
if (cursor != null) {
|
|
cursor.close();
|
|
}
|
|
db.close();
|
|
}
|
|
return logBeanList;
|
|
}
|
|
|
|
public String saveToFile() {
|
|
List<LogBean> logBeanList = getLogList();
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd-HH_mm_ss");
|
|
Date date = new Date(System.currentTimeMillis());
|
|
String fileName = sdf.format(date) + " log.txt";
|
|
String filePath = ContextCompat.getExternalFilesDirs(mContext, Environment.DIRECTORY_DOCUMENTS)[0].getAbsolutePath()
|
|
+ File.separator + fileName;
|
|
File logFile = new File(filePath);
|
|
if (logFile.exists()) {
|
|
logFile.delete();
|
|
}
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
for (LogBean logBean : logBeanList) {
|
|
stringBuilder.append(logBean.toLogString()).append("\n");
|
|
}
|
|
byte[] bs = stringBuilder.toString().getBytes();
|
|
try {
|
|
OutputStream out = new FileOutputStream(logFile);
|
|
InputStream is = new ByteArrayInputStream(bs);
|
|
byte[] buff = new byte[1024];
|
|
int len = 0;
|
|
while ((len = is.read(buff)) != -1) {
|
|
out.write(buff, 0, len);
|
|
}
|
|
is.close();
|
|
out.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
Log.e(TAG, "saveToFile: " + logFile.getAbsolutePath());
|
|
return logFile.getAbsolutePath();
|
|
}
|
|
|
|
}
|