自检检查TF卡可用空间

hdrplus
Matthew 1 year ago
parent b74d96991a
commit 7a60b905be

@ -274,7 +274,7 @@ Java_com_xypower_mpapp_MicroPhotoService_init(
jobject pThis, jstring appPath,
jstring ip, jint port, jstring cmdid, jint protocol,
jint networkProtocol, jint encryptData, jlong netHandle, jint signalLevel,
jint versionCode, jlong buildTime, jstring simcard) {
jint versionCode, jlong buildTime, jstring simcard, jstring tfCardPath) {
/*
google_breakpad::MinidumpDescriptor descriptor(".");
@ -303,6 +303,7 @@ Java_com_xypower_mpapp_MicroPhotoService_init(
const char *ipStr = env->GetStringUTFChars(ip, 0);
const char *cmdidStr = env->GetStringUTFChars(cmdid, 0);
const char *simcardStr = env->GetStringUTFChars(simcard, 0);
const char *tfCardPathStr = env->GetStringUTFChars(tfCardPath, 0);
JavaVM* vm = NULL;
jint ret = env->GetJavaVM(&vm);
@ -318,6 +319,7 @@ Java_com_xypower_mpapp_MicroPhotoService_init(
device->UpdateSignalLevel(signalLevel);
device->SetBuildTime(buildTime / 1000);
device->UpdateSimcard(simcardStr);
device->UpdateTfCardPath(tfCardPathStr == NULL ? "" : std::string(tfCardPathStr));
pTerminal->InitServerInfo(appPathStr, cmdidStr, ipStr, port, udpOrTcp, encryptData);
// pTerminal->SetPacketSize(1 * 1024); // 1K
@ -330,6 +332,7 @@ Java_com_xypower_mpapp_MicroPhotoService_init(
env->ReleaseStringUTFChars(ip, ipStr);
env->ReleaseStringUTFChars(cmdid, cmdidStr);
env->ReleaseStringUTFChars(simcard, simcardStr);
env->ReleaseStringUTFChars(tfCardPath, tfCardPathStr);
if (!res)
{

@ -410,6 +410,15 @@ bool CPhoneDevice::SelfTest(std::string& result)
double fmp = ((double)fm * 100.0f) / ((double)tm);
result += std::string("可用内存:") + std::to_string((int)fmp) + std::string("%%\r\n");
if (!m_tfCardPath.empty())
{
fs::space_info si2 = fs::space(m_tfCardPath.c_str());
double fr2 = ((double)si2.available * 100.0f) / ((double)si2.capacity);
result += "TF卡可用空间";
result += std::to_string((int)fr2);
result += "%%\r\n";
}
return true;
}

@ -203,6 +203,10 @@ public:
void UpdatePosition(double lon, double lat, double radius, time_t ts);
bool OnVideoReady(bool result, const char* path, unsigned int photoId);
void UpdateSignalLevel(int signalLevel);
void UpdateTfCardPath(const std::string& tfCardPath)
{
m_tfCardPath = tfCardPath;
}
void SetBuildTime(time_t buildTime)
{
mBuildTime = buildTime;
@ -267,6 +271,7 @@ protected:
JavaVM* m_vm;
jobject m_javaService;
std::string m_appPath;
std::string m_tfCardPath;
jmethodID mRegisterHeartbeatMid;
jmethodID mUpdateCaptureScheduleMid;

@ -662,13 +662,17 @@ public class MicroPhotoService extends Service {
MicroPhotoService service = MicroPhotoService.this;
int versionCode = MicroPhotoContext.getVersionCode(MicroPhotoService.this.getApplicationContext());
Context context = service.getApplicationContext();
int versionCode = MicroPhotoContext.getVersionCode(context);
String simcard = SysApi.getImei(getApplicationContext());
if (simcard == null) {
simcard = "";
}
service.mNativeHandle = init(appPath, server, port, cmdid, protocol, networkProtocol, encryptData, 0, service.getSignalLevel(), versionCode, BuildConfig.BUILD_TIMESTAMP, simcard);
String tfCardPath = MicroPhotoContext.getSecondaryStoragePath(context);
service.mNativeHandle = init(appPath, server, port, cmdid, protocol, networkProtocol,
encryptData, 0, service.getSignalLevel(), versionCode,
BuildConfig.BUILD_TIMESTAMP, simcard, tfCardPath);
if (service.mNativeHandle != 0) {
isRunning = true;
@ -1120,7 +1124,9 @@ CellSignalStrengthGsm cellSignalStrengthGsm = cellInfoGsm.getCellSignalStrength(
cellSignalStrengthGsm.getDbm();
*/
protected native long init(String appPath, String ip, int port, String cmdid, int protocol, int networkProtocl, int encryptData, long netHandle, int signalLevel, int versionCode, long buildTime, String simcard);
protected native long init(String appPath, String ip, int port, String cmdid, int protocol,
int networkProtocl, int encryptData, long netHandle, int signalLevel,
int versionCode, long buildTime, String simcard, String tfCardPath);
protected native long getHeartbeatDuration(long handler);
protected native long[] getPhotoTimeData(long handler, long startTime);
protected native long[] getPhotoTimeData2(long handler);

@ -1,10 +1,12 @@
package com.xypower.common;
import android.app.ActivityManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.os.storage.StorageManager;
import android.text.TextUtils;
import org.json.JSONArray;
@ -19,6 +21,7 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.List;
@ -116,6 +119,50 @@ public class MicroPhotoContext {
return stringBuilder == null ? null : stringBuilder.toString();
}
// 获取主存储卡路径
public static String getPrimaryStoragePath(Context context) {
try {
StorageManager sm = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
Method getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths", (Class<?>[])null);
Object[] args = null;
String[] paths = (String[]) getVolumePathsMethod.invoke(sm, args);
// first element in paths[] is primary storage path
return paths[0];
} catch (Exception e) {
// Log.e(TAG, "getPrimaryStoragePath() failed", e);
}
return null;
}
// 获取次存储卡路径,一般就是外置 TF 卡了. 不过也有可能是 USB OTG 设备...
// 其实只要判断第二章卡在挂载状态,就可以用了.
public static String getSecondaryStoragePath(Context context) {
try {
StorageManager sm = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
Method getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths", (Class<?>[])null);
Object[] args = null;
String[] paths = (String[]) getVolumePathsMethod.invoke(sm, args);
// second element in paths[] is secondary storage path
return paths.length <= 1 ? null : paths[1];
} catch (Exception e) {
// Log.e(TAG, "getSecondaryStoragePath() failed", e);
}
return null;
}
// 获取存储卡的挂载状态. path 参数传入上两个方法得到的路径
public String getStorageState(Context context, String path) {
try {
StorageManager sm = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
Method getVolumeStateMethod = StorageManager.class.getMethod("getVolumeState", new Class[] {String.class});
String state = (String) getVolumeStateMethod.invoke(sm, path);
return state;
} catch (Exception e) {
// Log.e(TAG, "getStorageState() failed", e);
}
return null;
}
public static boolean isAppAlive(Context context, String packageName) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> services = am.getRunningServices(Integer.MAX_VALUE);

Loading…
Cancel
Save