增加流量信息查询

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");
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");
mRebootMid = env->GetMethodID(classService, "reboot", "(IJLjava/lang/String;)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;
int res = 0;
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)
{
@ -1045,12 +1046,24 @@ bool CPhoneDevice::QuerySystemProperties(std::map<std::string, std::string>& pro
{
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))
{
if (powerInfo.empty())
{
QueryPowerInfo(powerInfo);
QueryFlowInfo(powerInfo);
}
auto it2 = powerInfo.find(it->first);
if (it2 != powerInfo.cend())
@ -1097,7 +1110,7 @@ std::string CPhoneDevice::QueryCpuTemperature()
return "";
}
void CPhoneDevice::QueryPowerInfo(std::map<std::string, std::string>& powerInfo)
void CPhoneDevice::QueryFlowInfo(std::map<std::string, std::string>&flowInfo)
{
JNIEnv* env = NULL;
jboolean ret = JNI_FALSE;
@ -1107,7 +1120,7 @@ void CPhoneDevice::QueryPowerInfo(std::map<std::string, std::string>& powerInfo)
{
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);
if (didAttachThread)
{
@ -1117,7 +1130,7 @@ void CPhoneDevice::QueryPowerInfo(std::map<std::string, std::string>& powerInfo)
if (!str.empty())
{
std::map<std::string, std::string> queries = parseQuery(str);
powerInfo.swap(queries);
flowInfo.swap(queries);
}
}

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

@ -1412,62 +1412,25 @@ public class MicroPhotoService extends Service {
return -1;
}
public String getSystemInfo() {
boolean isXyPlatform = mModelName.startsWith("tb8788");
StringBuilder sb = new StringBuilder();
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("&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);
public String getFlowInfo() {
Date dt = new Date();
dt.setDate(1);
dt.setHours(0);
dt.setMinutes(0);
dt.setSeconds(0);
long startTime = dt.getTime();
if (dt.getMonth() == 12) {
dt.setYear(dt.getYear() + 1);
dt.setMonth(1);
} else {
dt.setMonth(dt.getMonth() + 1);
}
long endTime = dt.getTime() - 1;
NetworkUtils.Usage usage = NetworkUtils.getApplicationQuerySummary(this.getApplicationContext(), startTime, endTime, getApplicationInfo().uid);
// SysApi.getCpuRate();
return sb.toString();
return "RX=" + Long.toString(usage.mobleRxBytes) + "&TX=" + Long.toString(usage.mobleTxBytes);
}
public boolean installApp(final String path, long delayedTime) {

@ -1,6 +1,8 @@
package com.xypower.common;
import android.annotation.SuppressLint;
import android.app.usage.NetworkStats;
import android.app.usage.NetworkStatsManager;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
@ -12,6 +14,7 @@ import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.RemoteException;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
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