自检检查TF卡可用空间

hdrplus
Matthew 1 year ago
parent b74d96991a
commit 7a60b905be

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

@ -410,6 +410,15 @@ bool CPhoneDevice::SelfTest(std::string& result)
double fmp = ((double)fm * 100.0f) / ((double)tm); double fmp = ((double)fm * 100.0f) / ((double)tm);
result += std::string("可用内存:") + std::to_string((int)fmp) + std::string("%%\r\n"); 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; return true;
} }

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

@ -662,13 +662,17 @@ public class MicroPhotoService extends Service {
MicroPhotoService service = MicroPhotoService.this; 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()); String simcard = SysApi.getImei(getApplicationContext());
if (simcard == null) { if (simcard == null) {
simcard = ""; 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) { if (service.mNativeHandle != 0) {
isRunning = true; isRunning = true;
@ -1120,7 +1124,9 @@ CellSignalStrengthGsm cellSignalStrengthGsm = cellInfoGsm.getCellSignalStrength(
cellSignalStrengthGsm.getDbm(); 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 getHeartbeatDuration(long handler);
protected native long[] getPhotoTimeData(long handler, long startTime); protected native long[] getPhotoTimeData(long handler, long startTime);
protected native long[] getPhotoTimeData2(long handler); protected native long[] getPhotoTimeData2(long handler);

@ -1,10 +1,12 @@
package com.xypower.common; package com.xypower.common;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.Service;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Environment; import android.os.Environment;
import android.os.storage.StorageManager;
import android.text.TextUtils; import android.text.TextUtils;
import org.json.JSONArray; import org.json.JSONArray;
@ -19,6 +21,7 @@ import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -116,6 +119,50 @@ public class MicroPhotoContext {
return stringBuilder == null ? null : stringBuilder.toString(); 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) { public static boolean isAppAlive(Context context, String packageName) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> services = am.getRunningServices(Integer.MAX_VALUE); List<ActivityManager.RunningServiceInfo> services = am.getRunningServices(Integer.MAX_VALUE);

Loading…
Cancel
Save