增加流量信息查询

PtzNew
Matthew 3 months ago
parent 0cfd48ff92
commit 9ad980f666

@ -534,7 +534,7 @@ CPhoneDevice::CPhoneDevice(JavaVM* vm, jobject service, const std::string& appPa
mRequestWakelockMid = env->GetMethodID(classService, "requestWakelock", "(Ljava/lang/String;J)V"); mRequestWakelockMid = env->GetMethodID(classService, "requestWakelock", "(Ljava/lang/String;J)V");
mReleaseWakelockMid = env->GetMethodID(classService, "releaseWakelock", "(Ljava/lang/String;)V"); mReleaseWakelockMid = env->GetMethodID(classService, "releaseWakelock", "(Ljava/lang/String;)V");
mGetSystemInfoMid = env->GetMethodID(classService, "getSystemInfo", "()Ljava/lang/String;"); mGetFlowInfoMid = env->GetMethodID(classService, "getFlowInfo", "()Ljava/lang/String;");
mInstallAppMid = env->GetMethodID(classService, "installApp", "(Ljava/lang/String;J)Z"); mInstallAppMid = env->GetMethodID(classService, "installApp", "(Ljava/lang/String;J)Z");
mRebootMid = env->GetMethodID(classService, "reboot", "(IJLjava/lang/String;)V"); mRebootMid = env->GetMethodID(classService, "reboot", "(IJLjava/lang/String;)V");
mEnableGpsMid = env->GetMethodID(classService, "enableGps", "(Z)V"); mEnableGpsMid = env->GetMethodID(classService, "enableGps", "(Z)V");
@ -886,6 +886,7 @@ bool CPhoneDevice::QuerySystemProperties(std::map<std::string, std::string>& pro
std::map<std::string, std::string> powerInfo; std::map<std::string, std::string> powerInfo;
int res = 0; int res = 0;
int bv = -1; int bv = -1;
std::map<std::string, std::string> flowInfo;
for (std::map<std::string, std::string>::iterator it = properties.begin(); it != properties.end(); ++it) for (std::map<std::string, std::string>::iterator it = properties.begin(); it != properties.end(); ++it)
{ {
@ -1045,12 +1046,24 @@ bool CPhoneDevice::QuerySystemProperties(std::map<std::string, std::string>& pro
{ {
it->second = std::to_string(m_signalLevel); it->second = std::to_string(m_signalLevel);
} }
else if ((it->first == (PROP_MOBILE_FLOW_TX)) || (it->first == (PROP_MOBILE_FLOW_RX)))
{
if (!flowInfo.empty())
{
QueryFlowInfo(powerInfo);
}
auto it2 = flowInfo.find(it->first);
if (it2 != flowInfo.cend())
{
it->second = it2->second;
}
}
/* /*
else if (startsWith(it->first, PROP_JAVA_PREFIX)) else if (startsWith(it->first, PROP_JAVA_PREFIX))
{ {
if (powerInfo.empty()) if (powerInfo.empty())
{ {
QueryPowerInfo(powerInfo); QueryFlowInfo(powerInfo);
} }
auto it2 = powerInfo.find(it->first); auto it2 = powerInfo.find(it->first);
if (it2 != powerInfo.cend()) if (it2 != powerInfo.cend())
@ -1097,7 +1110,7 @@ std::string CPhoneDevice::QueryCpuTemperature()
return ""; return "";
} }
void CPhoneDevice::QueryPowerInfo(std::map<std::string, std::string>& powerInfo) void CPhoneDevice::QueryFlowInfo(std::map<std::string, std::string>&flowInfo)
{ {
JNIEnv* env = NULL; JNIEnv* env = NULL;
jboolean ret = JNI_FALSE; jboolean ret = JNI_FALSE;
@ -1107,7 +1120,7 @@ void CPhoneDevice::QueryPowerInfo(std::map<std::string, std::string>& powerInfo)
{ {
ALOGE("Failed to get JNI Env"); ALOGE("Failed to get JNI Env");
} }
jobject jobj = env->CallObjectMethod(m_javaService, mGetSystemInfoMid); jobject jobj = env->CallObjectMethod(m_javaService, mGetFlowInfoMid);
std::string str = jstring2string(env, (jstring)jobj); std::string str = jstring2string(env, (jstring)jobj);
if (didAttachThread) if (didAttachThread)
{ {
@ -1117,7 +1130,7 @@ void CPhoneDevice::QueryPowerInfo(std::map<std::string, std::string>& powerInfo)
if (!str.empty()) if (!str.empty())
{ {
std::map<std::string, std::string> queries = parseQuery(str); std::map<std::string, std::string> queries = parseQuery(str);
powerInfo.swap(queries); flowInfo.swap(queries);
} }
} }

@ -323,7 +323,7 @@ protected:
return false; return false;
} }
void QueryPowerInfo(std::map<std::string, std::string>& powerInfo); void QueryFlowInfo(std::map<std::string, std::string>& powerInfo);
std::string QueryCpuTemperature(); std::string QueryCpuTemperature();
bool OnImageReady(cv::Mat mat); bool OnImageReady(cv::Mat mat);
@ -373,7 +373,7 @@ protected:
jmethodID mRequestWakelockMid; jmethodID mRequestWakelockMid;
jmethodID mReleaseWakelockMid; jmethodID mReleaseWakelockMid;
jmethodID mGetSystemInfoMid; jmethodID mGetFlowInfoMid;
jmethodID mRebootMid; jmethodID mRebootMid;
jmethodID mInstallAppMid; jmethodID mInstallAppMid;

@ -1412,62 +1412,25 @@ public class MicroPhotoService extends Service {
return -1; return -1;
} }
public String getSystemInfo() { public String getFlowInfo() {
boolean isXyPlatform = mModelName.startsWith("tb8788"); Date dt = new Date();
dt.setDate(1);
StringBuilder sb = new StringBuilder(); dt.setHours(0);
dt.setMinutes(0);
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); dt.setSeconds(0);
Intent intent = getApplicationContext().registerReceiver(null, intentFilter);
long startTime = dt.getTime();
int batteryStatus = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); if (dt.getMonth() == 12) {
int isCahrging = ((batteryStatus == BatteryManager.BATTERY_STATUS_CHARGING) || dt.setYear(dt.getYear() + 1);
(batteryStatus == BatteryManager.BATTERY_STATUS_FULL)) ? 1 : 0; dt.setMonth(1);
} else {
int level = intent.getIntExtra("level", 0); ///电池剩余电量 dt.setMonth(dt.getMonth() + 1);
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("&BC=" + Float.toString(bcaVal));
sb.append("&BV=" + Float.toString(((float)bv) / 1000));
sb.append("&BP=" + level);
sb.append("&BS=" + scale);
sb.append("&CS=" + isCahrging);
ConnectivityManager cm = (ConnectivityManager)getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
boolean isMetered = cm.isActiveNetworkMetered();
sb.append("&NS=" + (isMetered ? "1" : "0"));
final TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
SignalStrength ss = telephonyManager.getSignalStrength();
// List<CellSignalStrength> css = ss.getCellSignalStrengths();
if (ss != null) {
int signalLevel = ss.getLevel();
sb.append("&Signal4G=" + signalLevel);
sb.append("&Signal2G=" + signalLevel);
sb.append("&SL=" + signalLevel);
} }
long endTime = dt.getTime() - 1;
NetworkUtils.Usage usage = NetworkUtils.getApplicationQuerySummary(this.getApplicationContext(), startTime, endTime, getApplicationInfo().uid);
// SysApi.getCpuRate(); return "RX=" + Long.toString(usage.mobleRxBytes) + "&TX=" + Long.toString(usage.mobleTxBytes);
return sb.toString();
} }
public boolean installApp(final String path, long delayedTime) { public boolean installApp(final String path, long delayedTime) {

@ -1,6 +1,8 @@
package com.xypower.common; package com.xypower.common;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.usage.NetworkStats;
import android.app.usage.NetworkStatsManager;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
@ -12,6 +14,7 @@ import android.net.NetworkCapabilities;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.net.Uri; import android.net.Uri;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.RemoteException;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.format.Formatter; import android.text.format.Formatter;
@ -193,4 +196,40 @@ public class NetworkUtils {
*/ */
public static class Usage {
public long mobleRxBytes;//移动 下载字节
public long mobleTxBytes;//移动 上传字节
public String uid;//包名
}
/**
*
* @param context
* @param startTime
* @param endTime
* @param uid uid
*/
public static Usage getApplicationQuerySummary(Context context, long startTime, long endTime, int uid) {
Usage usage = new Usage();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
NetworkStatsManager nsm = (NetworkStatsManager) context.getSystemService(Context.NETWORK_STATS_SERVICE);
assert nsm != null;
try {
NetworkStats mobile = nsm.querySummary(ConnectivityManager.TYPE_MOBILE, null, startTime, endTime);
do {
NetworkStats.Bucket bucket = new NetworkStats.Bucket();
mobile.getNextBucket(bucket);
if(bucket.getUid() == uid) {
usage.mobleRxBytes += bucket.getRxBytes();
usage.mobleTxBytes += bucket.getTxBytes();
}
} while (mobile.hasNextBucket());
} catch (RemoteException e) {
e.printStackTrace();
}
}
return usage;
}
} }

Loading…
Cancel
Save