diff --git a/app/build.gradle b/app/build.gradle index ee91684e..239cdc82 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,8 +2,8 @@ plugins { id 'com.android.application' } -def AppVersionName = "1.0.19" -def AppVersionCode = ((1 * 100 + 1) * 100 + 0) * 10 + 19 +def AppVersionName = "1.0.20" +def AppVersionCode = ((1 * 100 + 1) * 100 + 0) * 10 + 20 android { namespace 'com.xypower.mpapp' diff --git a/app/src/main/cpp/MicroPhoto.cpp b/app/src/main/cpp/MicroPhoto.cpp index 7d6e36a9..69394f39 100644 --- a/app/src/main/cpp/MicroPhoto.cpp +++ b/app/src/main/cpp/MicroPhoto.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #ifdef USING_BREAK_PAD #include "client/linux/handler/exception_handler.h" @@ -125,6 +126,15 @@ Java_com_xypower_mpapp_MicroPhotoService_init( */ + char model[PROP_VALUE_MAX] = { 0 }; + __system_property_get("ro.product.model", model); + + jclass classService = env->GetObjectClass(pThis); + jfieldID fieldId = env->GetFieldID(classService, "mModelName", "Ljava/lang/String;"); + env->DeleteLocalRef(classService); + jstring modelName = env->NewStringUTF(model); + env->SetObjectField(pThis, fieldId, modelName); + bool udpOrTcp = (networkProtocol != 0); // 0: tcp const char *appPathStr = env->GetStringUTFChars(appPath, 0); const char *ipStr = env->GetStringUTFChars(ip, 0); diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 3c20ac94..432418c4 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -33,8 +33,11 @@ #include #include +#include #include +#include +namespace fs = std::filesystem; extern bool GetJniEnv(JavaVM *vm, JNIEnv **env, bool& didAttachThread); @@ -182,7 +185,7 @@ CPhoneDevice::CPhoneDevice(JavaVM* vm, jobject service) mRequestWakelockMid = env->GetMethodID(classService, "requestWakelock", "(Ljava/lang/String;J)V"); mReleaseWakelockMid = env->GetMethodID(classService, "releaseWakelock", "(Ljava/lang/String;)V"); - mGetPowerInfoMid = env->GetMethodID(classService, "getPowerInfo", "()Ljava/lang/String;"); + mGetSystemInfoMid = env->GetMethodID(classService, "getSystemInfo", "()Ljava/lang/String;"); mRebootMid = env->GetMethodID(classService, "reboot", "(I)V"); mEnableGpsMid = env->GetMethodID(classService, "enableGps", "(Z)V"); mRequestPositionMid = env->GetMethodID(classService, "requestPosition", "()Z"); @@ -285,18 +288,55 @@ bool CPhoneDevice::QuerySystemProperties(std::map& pro __system_property_get("phone.imei", value); it->second = value; } + else if (it->first == PROP_OPERATION_TEMP) + { + it->second = QueryCpuTemperature(); + } + else if (it->first == PROP_BS_ID) + { + it->second = "SHXY"; + } + else if (it->first == PROP_FREE_ROM) + { + fs::space_info si = fs::space("/data"); + it->second = std::to_string(si.available); + } + else if (it->first == PROP_TOTAL_ROM) + { + fs::space_info si = fs::space("/data"); + it->second = std::to_string(si.capacity); + } + else if (startsWith(it->first, PROP_JAVA_PREFIX)) + { + if (powerInfo.empty()) + { + QueryPowerInfo(powerInfo); + } + auto it2 = powerInfo.find(it->first); + if (it2 != powerInfo.cend()) + { + it->second = it2->second; + } + } + } - properties[PROP_BS_ID] = "SHXY"; - - + // __system_property_get("ro.telephony.default_network", value); + return true; +} +std::string CPhoneDevice::QueryCpuTemperature() +{ + // /sys/devices/virtual/thermal/thermal_zone0/temp + std::vector data; + if (readFile("/sys/devices/virtual/thermal/thermal_zone0/temp", data) && !data.empty()) + { + data.push_back(0); + int temp = atoi((const char*)(&data[0])); + return std::to_string(temp / 1000); } - __system_property_get("ro.telephony.default_network", value); - - - return true; + return ""; } void CPhoneDevice::QueryPowerInfo(std::map& powerInfo) @@ -309,7 +349,7 @@ void CPhoneDevice::QueryPowerInfo(std::map& powerInfo) { ALOGE("Failed to get JNI Env"); } - jobject jobj = env->CallObjectMethod(m_javaService, mGetPowerInfoMid); + jobject jobj = env->CallObjectMethod(m_javaService, mGetSystemInfoMid); std::string str = jstring2string(env, (jstring)jobj); if (didAttachThread) { diff --git a/app/src/main/cpp/PhoneDevice.h b/app/src/main/cpp/PhoneDevice.h index 32fda5be..f62f1d99 100644 --- a/app/src/main/cpp/PhoneDevice.h +++ b/app/src/main/cpp/PhoneDevice.h @@ -80,6 +80,7 @@ protected: } void QueryPowerInfo(std::map& powerInfo); + std::string QueryCpuTemperature(); bool OnImageReady(const cv::Mat& mat); void onError(const std::string& msg); @@ -98,7 +99,7 @@ protected: jmethodID mRequestWakelockMid; jmethodID mReleaseWakelockMid; - jmethodID mGetPowerInfoMid; + jmethodID mGetSystemInfoMid; jmethodID mRebootMid; jmethodID mEnableGpsMid; diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index b571a8cc..b83e1ad8 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -1,6 +1,7 @@ package com.xypower.mpapp; -import android.app.ActivityManager; +import static java.lang.System.loadLibrary; + import android.app.AlarmManager; import android.app.Notification; import android.app.NotificationChannel; @@ -17,6 +18,7 @@ import android.location.LocationManager; import android.location.LocationProvider; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; +import android.os.BatteryManager; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -27,6 +29,8 @@ import android.os.SystemClock; import androidx.core.app.NotificationCompat; +import android.telephony.CellSignalStrength; +import android.telephony.SignalStrength; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; @@ -52,7 +56,7 @@ public class MicroPhotoService extends Service { // Used to load the 'microphoto' library on application startup. static { - System.loadLibrary("microphoto"); + loadLibrary("microphoto"); } private static final String ALARM_EVENT = "com.xinyingpower.mp.MicroPhotoService.AlarmReceiver"; public static final int NOTIFICATION_ID_FOREGROUND_SERVICE = 8466503; @@ -101,6 +105,8 @@ public class MicroPhotoService extends Service { private ServiceHandler mHander = null; private Messenger mMessenger = null; + private String mModelName = null; + public MicroPhotoService() { } @Override @@ -761,16 +767,69 @@ public class MicroPhotoService extends Service { th.start(); } - public String getPowerInfo() { + public String getSystemInfo() { + + boolean isXyPlatform = !mModelName.startsWith("ELE-"); + StringBuilder sb = new StringBuilder(); - sb.append("CV=" + SysApi.getChargingVoltage()); // ChargeVol - sb.append("&CC=" + SysApi.getChargingCurrent()); // ChargeCurrent - sb.append("&CP="+ SysApi.getChargingPower()); // ChargePower: - sb.append("&CBV="+ SysApi.getChargingBusVoltage()); // ChargeBusVol - sb.append("&BV="+ SysApi.getBatteryVoltage()); // BatVol - sb.append("&BC="+ SysApi.getBatteryCurrent()); // BatCurrent - sb.append("&BP="+ SysApi.getBatteryPower()); // BattaryPower - sb.append("&BBV="+ SysApi.getBatteryBusVoltage()); // BattaryBusVol + if (isXyPlatform) { + sb.append("&J_CV=" + SysApi.getChargingVoltage()); // ChargeVol + sb.append("&J_CC=" + SysApi.getChargingCurrent()); // ChargeCurrent + sb.append("&J_CP=" + SysApi.getChargingPower()); // ChargePower: + sb.append("&J_CBV=" + SysApi.getChargingBusVoltage()); // ChargeBusVol + sb.append("&J_BV=" + SysApi.getBatteryVoltage()); // BatVol + sb.append("&J_BC=" + SysApi.getBatteryCurrent()); // BatCurrent + sb.append("&J_BP=" + SysApi.getBatteryPower()); // BattaryPower + sb.append("&J_BBV=" + SysApi.getBatteryBusVoltage()); // BattaryBusVol + } + + IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); + Intent intent = getApplicationContext().registerReceiver(null, intentFilter); + + int batteryStatus = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); + int isCahrging = ((batteryStatus == BatteryManager.BATTERY_STATUS_CHARGING) || + (batteryStatus == BatteryManager.BATTERY_STATUS_FULL)) ? 1 : 0; + + int level = intent.getIntExtra("level", 0); ///电池剩余电量 + int scale = intent.getIntExtra("scale", 0); ///获取电池满电量数值 + // intent.getStringExtra("technology"); ///获取电池技术支持 + // intent.getIntExtra("status",BatteryManager.BATTERY_STATUS_UNKNOWN); ///获取电池状态 + // intent.getIntExtra("plugged", 0); ///获取电源信息 + // intent.getIntExtra("health",BatteryManager.BATTERY_HEALTH_UNKNOWN); ///获取电池健康度 + int bv = intent.getIntExtra("voltage", 0); /// mv + int temp = intent.getIntExtra("temperature", 0); ///获取电池温度 + + BatteryManager manager = (BatteryManager) getSystemService(BATTERY_SERVICE); + // manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER); + int bca = manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE); + int bc = manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW); + level = manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY); + + float bcaVal = (bca < 0) ? ((-bca)/1000000000) : (bca / 1000000000); + + sb.append("&J_BC=" + Float.toString(bcaVal)); + sb.append("&J_BV=" + Float.toString(((float)bv) / 1000)); + sb.append("&J_BP=" + level); + sb.append("&J_BS=" + scale); + sb.append("&J_BCS=" + isCahrging); + + ConnectivityManager cm = (ConnectivityManager)getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); + boolean isMetered = cm.isActiveNetworkMetered(); + + sb.append("&J_ConnState=" + (isMetered ? "1" : "0")); + + final TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); + + SignalStrength ss = telephonyManager.getSignalStrength(); + List css = ss.getCellSignalStrengths(); + + int signalLevel = ss.getLevel(); + sb.append("&J_Signal4G=" + signalLevel); + sb.append("&J_Signal2G=" + signalLevel); + if (css != null && css.size() > 0) { + + } + // SysApi.getCpuRate(); return sb.toString(); } diff --git a/app/src/main/java/com/xypower/mpapp/NetworkChangedReceiver.java b/app/src/main/java/com/xypower/mpapp/NetworkChangedReceiver.java index 42140c7e..82503ee4 100644 --- a/app/src/main/java/com/xypower/mpapp/NetworkChangedReceiver.java +++ b/app/src/main/java/com/xypower/mpapp/NetworkChangedReceiver.java @@ -23,9 +23,9 @@ public class NetworkChangedReceiver extends BroadcastReceiver { private String getConnectionType(int type) { String connType = ""; if (type == ConnectivityManager.TYPE_MOBILE) { - connType = "3G网络数据"; + connType = "3G"; } else if (type == ConnectivityManager.TYPE_WIFI) { - connType = "WIFI网络"; + connType = "WIFI"; } return connType; } @@ -53,7 +53,7 @@ public class NetworkChangedReceiver extends BroadcastReceiver { NetworkInfo.State state = networkInfo.getState(); //判断网络是否已经连接 boolean isConnected = state == NetworkInfo.State.CONNECTED; - Log.e("TAG", "isConnected:" + isConnected); + // Log.e("TAG", "isConnected:" + isConnected); if (isConnected) { } else { @@ -76,7 +76,7 @@ public class NetworkChangedReceiver extends BroadcastReceiver { } } else { - Log.i("TAG", getConnectionType(info.getType()) + "断开"); + // Log.i("TAG", getConnectionType(info.getType()) + "断开"); } } }