实现系统信息的获取

serial
Matthew 2 years ago
parent de50d81f7c
commit 94ef05c596

@ -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'

@ -9,6 +9,7 @@
#include <camera/NdkCameraDevice.h>
#include <camera/NdkCameraError.h>
#include <camera/NdkCameraManager.h>
#include <sys/system_properties.h>
#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);

@ -33,8 +33,11 @@
#include <opencv2/imgproc/imgproc.hpp>
#include <android/log.h>
#include <android/thermal.h>
#include <sys/system_properties.h>
#include <filesystem>
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<std::string, std::string>& 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<unsigned char> 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<std::string, std::string>& powerInfo)
@ -309,7 +349,7 @@ void CPhoneDevice::QueryPowerInfo(std::map<std::string, std::string>& 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)
{

@ -80,6 +80,7 @@ protected:
}
void QueryPowerInfo(std::map<std::string, std::string>& 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;

@ -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<CellSignalStrength> 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();
}

@ -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()) + "断开");
}
}
}

Loading…
Cancel
Save