version:
update:2020.09.22 fix:修复强制安装应用为空时缓存了上次的管控信息 add:
This commit is contained in:
@@ -22,6 +22,10 @@ import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.amap.api.location.AMapLocation;
|
||||
import com.amap.api.location.AMapLocationClient;
|
||||
import com.amap.api.location.AMapLocationClientOption;
|
||||
import com.amap.api.location.AMapLocationListener;
|
||||
import com.arialyy.aria.core.Aria;
|
||||
import com.arialyy.aria.core.download.DownloadEntity;
|
||||
import com.blankj.utilcode.util.LogUtils;
|
||||
@@ -48,6 +52,7 @@ import com.mjsheng.myappstore.server.MyDownloadService;
|
||||
import com.mjsheng.myappstore.server.StepService;
|
||||
import com.mjsheng.myappstore.utils.Configure;
|
||||
import com.mjsheng.myappstore.utils.MySQLData;
|
||||
import com.mjsheng.myappstore.utils.SPUtils;
|
||||
import com.mjsheng.myappstore.utils.ToastUtil;
|
||||
import com.mjsheng.myappstore.utils.Utils;
|
||||
import com.mjsheng.myappstore.utils.update.ToastTool;
|
||||
@@ -108,6 +113,8 @@ public class MyApplication extends MultiDexApplication {
|
||||
private SimpleDateFormat mDateFormat = null;
|
||||
private static List<Activity> activityList = new LinkedList();
|
||||
private Handler mHandler;
|
||||
private static AMapLocationClient locationClient = null;
|
||||
|
||||
|
||||
public static Context getAppContext() {
|
||||
return context;
|
||||
@@ -184,12 +191,57 @@ public class MyApplication extends MultiDexApplication {
|
||||
//// e.printStackTrace();
|
||||
// Log.e("第一个是Logcat", e.getMessage());
|
||||
// }
|
||||
initAmap();
|
||||
}
|
||||
|
||||
public static AMapLocationClient getLocationClient() {
|
||||
if (null == locationClient) {
|
||||
initAmap();
|
||||
}
|
||||
return locationClient;
|
||||
}
|
||||
|
||||
private static void initAmap() {
|
||||
locationClient = new AMapLocationClient(context);
|
||||
AMapLocationClientOption option = new AMapLocationClientOption();
|
||||
option.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn);
|
||||
option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
|
||||
option.setNeedAddress(true);
|
||||
//获取一次定位结果:
|
||||
//该方法默认为false。
|
||||
option.setOnceLocation(true);
|
||||
//获取最近3s内精度最高的一次定位结果:
|
||||
//设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。
|
||||
// 如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
|
||||
option.setOnceLocationLatest(true);
|
||||
locationClient.setLocationOption(option);
|
||||
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
|
||||
//设置定位监听
|
||||
locationClient.setLocationListener(new AMapLocationListener() {
|
||||
@Override
|
||||
public void onLocationChanged(AMapLocation aMapLocation) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
//errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明
|
||||
if (aMapLocation.getErrorCode() == 0) {
|
||||
sb.append(aMapLocation.getAddress() + "\n");
|
||||
SPUtils.put(context, "AmapAddress", aMapLocation.getAddress());
|
||||
} else {
|
||||
//定位失败
|
||||
sb.append("定位失败" + "\n");
|
||||
SPUtils.put(context, "AmapError", aMapLocation.getErrorInfo());
|
||||
}
|
||||
Log.e("addr", sb.toString());
|
||||
}
|
||||
});
|
||||
//设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
|
||||
locationClient.stopLocation();
|
||||
locationClient.startLocation();
|
||||
}
|
||||
|
||||
//第一个是Logcat ,也就是我们想要获取的log日志
|
||||
//第二个是 -s 也就是表示过滤的意思
|
||||
//第三个就是 我们要过滤的类型 W表示warm ,我们也可以换成 D :debug, I:info,E:error等等
|
||||
// String[] running = new String[]{"logcat", "-s", "adb logcat *: W"};
|
||||
//第二个是 -s 也就是表示过滤的意思
|
||||
//第三个就是 我们要过滤的类型 W表示warm ,我们也可以换成 D :debug, I:info,E:error等等
|
||||
// String[] running = new String[]{"logcat", "-s", "adb logcat *: W"};
|
||||
String[] running = new String[]{"logcat"};
|
||||
String filePath = "/sdcard/Log/Log.txt";
|
||||
|
||||
@@ -338,6 +390,7 @@ public class MyApplication extends MultiDexApplication {
|
||||
Intent intent1 = new Intent(BootReceiver.BOOT_COMPLETED);
|
||||
intent1.setComponent(new ComponentName("com.jiaoguanyi.store", "com.mjsheng.myappstore.receiver.BootReceiver"));
|
||||
sendBroadcast(intent1);
|
||||
deleteScreenshots();
|
||||
}
|
||||
}
|
||||
time3 = System.currentTimeMillis();
|
||||
@@ -357,6 +410,19 @@ public class MyApplication extends MultiDexApplication {
|
||||
|
||||
}
|
||||
|
||||
private void deleteScreenshots() {
|
||||
Log.e("File", "deleteScreenshots");
|
||||
String path = getExternalFilesDir("db").getAbsolutePath();
|
||||
File file = new File(path);
|
||||
File[] files = file.listFiles();
|
||||
for (File f : files) {
|
||||
if (f.isFile()) {
|
||||
Log.e("File", f.getAbsolutePath());
|
||||
f.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void getLockState(String status, String time) {
|
||||
GetLockState getLockState = Network.getLockState();
|
||||
getLockState.getLockState(Utils.getSerial(), status, time)
|
||||
@@ -897,4 +963,12 @@ public class MyApplication extends MultiDexApplication {
|
||||
Log.e("MyApplication", "isDownloading=" + MyApplication.getInstance().isDownloading());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTerminate() {
|
||||
super.onTerminate();
|
||||
//销毁时,需要销毁定位client
|
||||
if (null != locationClient) {
|
||||
locationClient.onDestroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,11 @@ import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.amap.api.location.AMapLocation;
|
||||
import com.amap.api.location.AMapLocationClient;
|
||||
import com.amap.api.location.AMapLocationClientOption;
|
||||
import com.amap.api.location.AMapLocationListener;
|
||||
import com.amap.api.location.AMapLocationQualityReport;
|
||||
import com.arialyy.aria.core.Aria;
|
||||
import com.blankj.utilcode.util.AppUtils;
|
||||
import com.blankj.utilcode.util.EncryptUtils;
|
||||
@@ -109,6 +114,7 @@ import io.reactivex.schedulers.Schedulers;
|
||||
import okhttp3.Call;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import okhttp3.internal.Util;
|
||||
import rx.Observable;
|
||||
import rx.functions.Action1;
|
||||
|
||||
@@ -116,7 +122,7 @@ import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.ACTION_SET;
|
||||
import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.TagAliasBean;
|
||||
import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.sequence;
|
||||
|
||||
public class MainActivity extends AppCompatActivity {
|
||||
public class MainActivity extends AppCompatActivity implements AMapLocationListener {
|
||||
|
||||
private ToastCallback callback;
|
||||
private long mPreClickTime;
|
||||
@@ -142,62 +148,6 @@ public class MainActivity extends AppCompatActivity {
|
||||
public static final String KEY_EXTRAS = "extras";
|
||||
|
||||
|
||||
public void registerMessageReceiver() {
|
||||
mMessageReceiver = new MessageReceiver();
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
|
||||
filter.addAction(MESSAGE_RECEIVED_ACTION);
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, filter);
|
||||
}
|
||||
|
||||
public class MessageReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
try {
|
||||
if (MESSAGE_RECEIVED_ACTION.equals(intent.getAction())) {
|
||||
String messge = intent.getStringExtra(KEY_MESSAGE);
|
||||
String extras = intent.getStringExtra(KEY_EXTRAS);
|
||||
StringBuilder showMsg = new StringBuilder();
|
||||
showMsg.append(KEY_MESSAGE + " : " + messge + "\n");
|
||||
if (!ExampleUtil.isEmpty(extras)) {
|
||||
showMsg.append(KEY_EXTRAS + " : " + extras + "\n");
|
||||
}
|
||||
// setCostomMsg(showMsg.toString());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void setAlias() {
|
||||
TagAliasBean tagAliasBean = new TagAliasBean();
|
||||
tagAliasBean.action = ACTION_SET;
|
||||
sequence++;
|
||||
tagAliasBean.alias = Utils.getSerial();
|
||||
tagAliasBean.isAliasAction = true;
|
||||
TagAliasOperatorHelper.getInstance().handleAction(MainActivity.this, sequence, tagAliasBean);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
setContentView(R.layout.activity_main);
|
||||
mContext = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
|
||||
// super.onSaveInstanceState(outState, outPersistentState);
|
||||
}
|
||||
|
||||
private class LocationReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
// ToastTool.show("广播:::"+intent.getAction() + "--------" + intent.getStringExtra("package_name"));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
if (savedInstanceState != null) {
|
||||
@@ -230,13 +180,73 @@ public class MainActivity extends AppCompatActivity {
|
||||
Intent allIntent = new Intent();
|
||||
allIntent.setAction(Utils.DOWNLOAD_ALLTASK_ACTION);
|
||||
sendBroadcast(allIntent);
|
||||
// CmdUtil.execute(" screencap -p /sdcard/" + "screen" + System.currentTimeMillis() + ".png");
|
||||
|
||||
Utils.getMachine(this);
|
||||
Utils.getHardware(this);
|
||||
// CmdUtil.execute(" screencap -p /sdcard/" + "screen" + System.currentTimeMillis() + ".png");
|
||||
// Utils.getMachine(this);
|
||||
// Utils.getHardware(this);
|
||||
// Utils.queryStorage();
|
||||
// Utils.shotScreen(this);
|
||||
HTTPInterface.updateDeviceInfo(this);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void registerMessageReceiver() {
|
||||
mMessageReceiver = new MessageReceiver();
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
|
||||
filter.addAction(MESSAGE_RECEIVED_ACTION);
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, filter);
|
||||
}
|
||||
|
||||
public class MessageReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
try {
|
||||
if (MESSAGE_RECEIVED_ACTION.equals(intent.getAction())) {
|
||||
String messge = intent.getStringExtra(KEY_MESSAGE);
|
||||
String extras = intent.getStringExtra(KEY_EXTRAS);
|
||||
StringBuilder showMsg = new StringBuilder();
|
||||
showMsg.append(KEY_MESSAGE + " : " + messge + "\n");
|
||||
if (!ExampleUtil.isEmpty(extras)) {
|
||||
showMsg.append(KEY_EXTRAS + " : " + extras + "\n");
|
||||
}
|
||||
// setCostomMsg(showMsg.toString());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setAlias() {
|
||||
TagAliasBean tagAliasBean = new TagAliasBean();
|
||||
tagAliasBean.action = ACTION_SET;
|
||||
sequence++;
|
||||
tagAliasBean.alias = Utils.getSerial();
|
||||
tagAliasBean.isAliasAction = true;
|
||||
TagAliasOperatorHelper.getInstance().handleAction(MainActivity.this, sequence, tagAliasBean);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
setContentView(R.layout.activity_main);
|
||||
mContext = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
|
||||
// super.onSaveInstanceState(outState, outPersistentState);
|
||||
}
|
||||
|
||||
private class LocationReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
// ToastTool.show("广播:::"+intent.getAction() + "--------" + intent.getStringExtra("package_name"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//获取教管易版本号
|
||||
synchronized private String getAPPVersionName() {
|
||||
PackageManager pm = getPackageManager();
|
||||
@@ -259,7 +269,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
.params("mac", com.blankj.utilcode.util.DeviceUtils.getMacAddress())
|
||||
.params("jpush_id", rid)
|
||||
.params("devices_version", devices_version)
|
||||
.params("appstore_version", BuildConfig.VERSION_NAME)//设备信息版本号
|
||||
.params("appstore_version", BuildConfig.VERSION_NAME)//我的设备版本号
|
||||
.params("store_version", getAPPVersionName())//管教易版本号
|
||||
.execute(new StringCallback() {
|
||||
@Override
|
||||
@@ -294,9 +304,26 @@ public class MainActivity extends AppCompatActivity {
|
||||
});
|
||||
imageView = findViewById(R.id.imageView);
|
||||
tv_devsn = findViewById(R.id.tv_devsn);
|
||||
tv_devsn.setText(Utils.getSerial());
|
||||
String SN = Utils.getSerial();
|
||||
tv_devsn.setText(SN);
|
||||
if (SN.length() != 12) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
|
||||
// builder.setTitle("SN错误");
|
||||
builder.setMessage("注意:设备SN号码格式错误!");
|
||||
builder.setIcon(R.mipmap.ic_launcher);
|
||||
builder.setCancelable(true);
|
||||
//设置正面按钮
|
||||
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
builder.show();
|
||||
}
|
||||
tv_devmac = findViewById(R.id.tv_devmac);
|
||||
String macaddr = com.blankj.utilcode.util.DeviceUtils.getMacAddress();
|
||||
Log.e("getMacAddress", Utils.getAndroid7MAC());
|
||||
if (macaddr.equals("")) {
|
||||
tv_devmac.setText("获取失败");
|
||||
} else {
|
||||
@@ -866,6 +893,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1776,4 +1804,69 @@ public class MainActivity extends AppCompatActivity {
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onLocationChanged(AMapLocation aMapLocation) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
//errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明
|
||||
if (aMapLocation.getErrorCode() == 0) {
|
||||
// sb.append("定位成功" + "\n");
|
||||
// sb.append("定位类型: " + location.getLocationType() + "\n");
|
||||
sb.append("位置: " + aMapLocation.getAddress() + "\n");
|
||||
// sb.append("经 度 : " + location.getLongitude() + "\n");
|
||||
// sb.append("纬 度 : " + location.getLatitude() + "\n");
|
||||
// sb.append("精 度 : " + location.getAccuracy() + "米" + "\n");
|
||||
// sb.append("提供者 : " + location.getProvider() + "\n");
|
||||
//
|
||||
// sb.append("速 度 : " + location.getSpeed() + "米/秒" + "\n");
|
||||
// sb.append("角 度 : " + location.getBearing() + "\n");
|
||||
//定位完成的时间
|
||||
// sb.append("定位时间: " + amapUtils.formatUTC(location.getTime(), "yyyy-MM-dd HH:mm:ss") + "\n");
|
||||
SPUtils.put(this, "AmapAddress", aMapLocation.getAddress());
|
||||
} else {
|
||||
//定位失败
|
||||
sb.append("定位失败" + "\n");
|
||||
// sb.append("错误码:" + location.getErrorCode() + "\n");
|
||||
// sb.append("错误信息:" + location.getErrorInfo() + "\n");
|
||||
// sb.append("错误描述:" + location.getLocationDetail() + "\n");
|
||||
}
|
||||
// sb.append("***定位质量报告***").append("\n");
|
||||
// sb.append("* WIFI开关:").append(location.getLocationQualityReport().isWifiAble() ? "开启" : "关闭").append("\n");
|
||||
// sb.append("* GPS状态:").append(getGPSStatusString(location.getLocationQualityReport().getGPSStatus())).append("\n");
|
||||
// sb.append("* GPS星数:").append(location.getLocationQualityReport().getGPSSatellites()).append("\n");
|
||||
// sb.append("****************").append("\n");
|
||||
// 定位之后的回调时间
|
||||
// sb.append("回调时间: " + amapUtils.formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\n");
|
||||
Log.e("addr", sb.toString());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取GPS状态的字符串
|
||||
*
|
||||
* @param statusCode GPS状态码
|
||||
* @return
|
||||
*/
|
||||
private String getGPSStatusString(int statusCode) {
|
||||
String str = "";
|
||||
switch (statusCode) {
|
||||
case AMapLocationQualityReport.GPS_STATUS_OK:
|
||||
str = "GPS状态正常";
|
||||
break;
|
||||
case AMapLocationQualityReport.GPS_STATUS_NOGPSPROVIDER:
|
||||
str = "手机中没有GPS Provider,无法进行GPS定位";
|
||||
break;
|
||||
case AMapLocationQualityReport.GPS_STATUS_OFF:
|
||||
str = "GPS关闭,建议开启GPS,提高定位质量";
|
||||
break;
|
||||
case AMapLocationQualityReport.GPS_STATUS_MODE_SAVING:
|
||||
str = "选择的定位模式中不包含GPS定位,建议选择包含GPS定位的模式,提高定位质量";
|
||||
break;
|
||||
case AMapLocationQualityReport.GPS_STATUS_NOGPSPERMISSION:
|
||||
str = "没有GPS定位权限,建议开启gps定位权限";
|
||||
break;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
33
app/src/main/java/com/mjsheng/myappstore/bean/Batch.java
Normal file
33
app/src/main/java/com/mjsheng/myappstore/bean/Batch.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package com.mjsheng.myappstore.bean;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class Batch implements Serializable {
|
||||
int id;
|
||||
String batch;
|
||||
int admin_id;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getBatch() {
|
||||
return batch;
|
||||
}
|
||||
|
||||
public void setBatch(String batch) {
|
||||
this.batch = batch;
|
||||
}
|
||||
|
||||
public int getAdmin_id() {
|
||||
return admin_id;
|
||||
}
|
||||
|
||||
public void setAdmin_id(int admin_id) {
|
||||
this.admin_id = admin_id;
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,7 @@ public abstract class JsonCallback<T> extends AbsCallback<T> {
|
||||
super.onBefore(request);
|
||||
// 主要用于在所有请求之前添加公共的请求头或请求参数
|
||||
// 例如登录授权的 token
|
||||
// 使用的设备信息
|
||||
// 使用的我的设备
|
||||
// 可以随意添加,也可以什么都不传
|
||||
// 还可以在这里对所有的参数进行加密,均在这里实现
|
||||
// request.headers("header1", "HeaderValue1")//
|
||||
|
||||
@@ -28,12 +28,14 @@ import com.mjsheng.myappstore.bean.NetAndLaunchBean;
|
||||
import com.mjsheng.myappstore.bean.NetAndLaunchData;
|
||||
import com.mjsheng.myappstore.bean.UserInfo;
|
||||
import com.mjsheng.myappstore.jpush.TagAliasOperatorHelper;
|
||||
import com.mjsheng.myappstore.network.api.newapi.UpdateDeviceInfo;
|
||||
import com.mjsheng.myappstore.utils.ApkUtils;
|
||||
import com.mjsheng.myappstore.utils.Configure;
|
||||
import com.mjsheng.myappstore.utils.SPUtils;
|
||||
import com.mjsheng.myappstore.utils.ToastUtil;
|
||||
import com.mjsheng.myappstore.utils.Utils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
@@ -41,8 +43,13 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import io.reactivex.Observer;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import okhttp3.Call;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
|
||||
import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.ACTION_SET;
|
||||
import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.sequence;
|
||||
@@ -50,7 +57,7 @@ import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.sequence;
|
||||
public class HTTPInterface {
|
||||
private final static int requestCodeOK = 200;
|
||||
|
||||
//获取设备信息接口
|
||||
//获取我的设备接口
|
||||
public static synchronized void checkDevicesInfo(final Handler handler) {
|
||||
OkGo.<String>post(UrlPath.SNINFO)
|
||||
.params("sn", Utils.getSn())
|
||||
@@ -746,33 +753,41 @@ public class HTTPInterface {
|
||||
}
|
||||
|
||||
|
||||
// public void updateDeviceInfo(Context context) {
|
||||
// UpdateDeviceInfo updateDeviceInfo = Network.getUpdateDeviceInfo();
|
||||
//
|
||||
// updateDeviceInfo.updateDeviceInfo()
|
||||
// .subscribeOn(Schedulers.io())
|
||||
// .observeOn(AndroidSchedulers.mainThread())
|
||||
// .subscribe(new Observer<ResponseBody>() {
|
||||
// @Override
|
||||
// public void onSubscribe(Disposable d) {
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onNext(ResponseBody responseBody) {
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onError(Throwable e) {
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onComplete() {
|
||||
//
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
public static void updateDeviceInfo(Context context) {
|
||||
UpdateDeviceInfo updateDeviceInfo = Network.getUpdateDeviceInfo();
|
||||
updateDeviceInfo.updateDeviceInfo(
|
||||
Utils.getSerial(),
|
||||
Configure.HTTP_KEY,
|
||||
Utils.getMachine(context),
|
||||
Utils.getHardware(context),
|
||||
String.valueOf(SPUtils.get(context, "AmapAddress", "-")))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<ResponseBody>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(ResponseBody responseBody) {
|
||||
try {
|
||||
Log.e("updateDeviceInfo", "上传的结果" + responseBody.string());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
Log.e("updateDeviceInfo",e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,6 +18,7 @@ import com.mjsheng.myappstore.network.api.RankAppApi;
|
||||
import com.mjsheng.myappstore.network.api.SystemSettingApi;
|
||||
import com.mjsheng.myappstore.network.api.UpdateApi;
|
||||
import com.mjsheng.myappstore.network.api.UploadAppInfoApi;
|
||||
import com.mjsheng.myappstore.network.api.newapi.GetBatchApi;
|
||||
import com.mjsheng.myappstore.network.api.newapi.GetLockState;
|
||||
import com.mjsheng.myappstore.network.api.newapi.UpdateDeviceInfo;
|
||||
|
||||
@@ -66,7 +67,7 @@ public class Network {
|
||||
|
||||
private static GetLockState getLockState;
|
||||
private static UpdateDeviceInfo updateDeviceInfo;
|
||||
|
||||
private static GetBatchApi getBatchApi;
|
||||
private static final long cacheSize = 1024 * 1024 * 20;// 缓存文件最大限制大小20M
|
||||
private static String cacheDirectory = Environment.getExternalStorageDirectory() + "/okttpcaches"; // 设置缓存文件路径
|
||||
private static Cache cache = new Cache(new File(cacheDirectory), cacheSize); //
|
||||
@@ -283,5 +284,18 @@ public class Network {
|
||||
return updateDeviceInfo;
|
||||
}
|
||||
|
||||
public static GetBatchApi getBatchApi() {
|
||||
if (getBatchApi == null) {
|
||||
Retrofit retrofit = new Retrofit.Builder()
|
||||
.client(cacheClient)
|
||||
.baseUrl(ROOT_URL)
|
||||
.addConverterFactory(gsonConverterFactory)
|
||||
.addCallAdapterFactory(rxJavaCallAdapterFactory)
|
||||
.build();
|
||||
getBatchApi = retrofit.create(GetBatchApi.class);
|
||||
}
|
||||
return getBatchApi;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ public class UrlPath {
|
||||
//主页接口
|
||||
|
||||
public static final String SNINFO = HOMEPATHRUL + "Member/snInfo";
|
||||
//设备信息接口
|
||||
//我的设备接口
|
||||
public static final String APPLOG = HOMEPATHRUL + "App/getApplog";
|
||||
|
||||
public final static String GET_APP_UPDATE = HOMEPATHRUL + "Update/update";
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.mjsheng.myappstore.network.api.newapi;
|
||||
|
||||
import com.mjsheng.myappstore.bean.Batch;
|
||||
import com.mjsheng.myappstore.bean.LzyResponse;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import okhttp3.ResponseBody;
|
||||
import retrofit2.http.Field;
|
||||
import retrofit2.http.FormUrlEncoded;
|
||||
import retrofit2.http.POST;
|
||||
|
||||
public interface GetBatchApi {
|
||||
@FormUrlEncoded
|
||||
@POST("log/getBatch")
|
||||
Observable<ResponseBody> getBatch(
|
||||
@Field("sn") String sn
|
||||
);
|
||||
}
|
||||
@@ -8,7 +8,7 @@ import retrofit2.http.POST;
|
||||
|
||||
public interface UpdateDeviceInfo {
|
||||
@FormUrlEncoded
|
||||
@POST("Application/getLockState")
|
||||
@POST("Mac/getInfo")
|
||||
Observable<ResponseBody> updateDeviceInfo(
|
||||
@Field("sn") String sn,
|
||||
@Field("key") String key,
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import com.mjsheng.myappstore.network.HTTPInterface;
|
||||
import com.mjsheng.myappstore.server.GuardService;
|
||||
import com.mjsheng.myappstore.server.InitJpushServer;
|
||||
import com.mjsheng.myappstore.server.MyDownloadService;
|
||||
@@ -17,6 +18,7 @@ public class BootReceiver extends BroadcastReceiver {
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Log.e("BootReceiver", intent.getAction());
|
||||
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
|
||||
HTTPInterface.updateDeviceInfo(context);
|
||||
startService(context);
|
||||
} else if (
|
||||
intent.getAction().equals("android.intent.action.BATTERY_CHANGED")
|
||||
|
||||
@@ -114,8 +114,6 @@ public class MyJPushReceiver extends BroadcastReceiver {
|
||||
private final String GET_DEVICES_INFO = "23";//获取设备详细信息
|
||||
|
||||
|
||||
|
||||
|
||||
private Context mContext;
|
||||
|
||||
private int changeNum(int paramInt) {
|
||||
@@ -286,10 +284,12 @@ public class MyJPushReceiver extends BroadcastReceiver {
|
||||
screenshot(extras);
|
||||
|
||||
break;
|
||||
|
||||
case DEVICES_REBOOT:
|
||||
Utils.rebootDevices(mContext);
|
||||
break;
|
||||
case GET_DEVICES_INFO:
|
||||
HTTPInterface.updateDeviceInfo(mContext);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1111,8 +1111,8 @@ public class MyJPushReceiver extends BroadcastReceiver {
|
||||
Observable.create(new ObservableOnSubscribe<Integer>() {
|
||||
@Override
|
||||
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
|
||||
String filepath = mContext.getExternalFilesDir("screenshot").getAbsolutePath();
|
||||
int n = CmdUtil.execute("screencap -p " + filepath + File.separator + time + ".png").code;
|
||||
String filepath = mContext.getExternalFilesDir("db").getAbsolutePath();
|
||||
int n = CmdUtil.execute("screencap -p " + filepath + File.separator + time + ".db").code;
|
||||
e.onNext(n);
|
||||
}
|
||||
}).subscribeOn(Schedulers.io())
|
||||
@@ -1128,13 +1128,13 @@ public class MyJPushReceiver extends BroadcastReceiver {
|
||||
if (integer == 0) {
|
||||
uplaodImage(time);
|
||||
} else {
|
||||
Log.e("doscreenshot", "截图失败");
|
||||
Log.e("doss", "失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
Log.e("doscreenshot", "Throwable=" + e.getMessage());
|
||||
Log.e("doss", "Throwable=" + e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1145,9 +1145,11 @@ public class MyJPushReceiver extends BroadcastReceiver {
|
||||
}
|
||||
|
||||
private void uplaodImage(long time) {
|
||||
String filepath = mContext.getExternalFilesDir("screenshot").getAbsolutePath();
|
||||
|
||||
File file = new File(filepath + File.separator + time + ".png");
|
||||
String filepath = mContext.getExternalFilesDir("db").getAbsolutePath();
|
||||
// String filepath = mContext.getFileStreamPath("screenshot").getAbsolutePath();
|
||||
//放在app内部data下面
|
||||
File file = new File(filepath + File.separator + time + ".db");
|
||||
//不要直接使用常用图片格式
|
||||
if (!file.exists()) {
|
||||
Log.e("uplaodImage", "File does not exists");
|
||||
return;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.mjsheng.myappstore.server;
|
||||
|
||||
import android.app.Service;
|
||||
import android.content.Context;
|
||||
import android.content.ContextWrapper;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
@@ -18,17 +17,15 @@ import android.util.Log;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.arialyy.aria.core.Aria;
|
||||
import com.blankj.utilcode.util.EncryptUtils;
|
||||
import com.blankj.utilcode.util.LogUtils;
|
||||
import com.blankj.utilcode.util.PathUtils;
|
||||
import com.blankj.utilcode.util.ToastUtils;
|
||||
import com.lzy.okgo.OkGo;
|
||||
import com.lzy.okgo.callback.StringCallback;
|
||||
import com.mjsheng.myappstore.BuildConfig;
|
||||
import com.mjsheng.myappstore.MyApplication;
|
||||
import com.mjsheng.myappstore.activity.MainActivity;
|
||||
import com.mjsheng.myappstore.bean.Batch;
|
||||
import com.mjsheng.myappstore.bean.ForceDownloadBean;
|
||||
import com.mjsheng.myappstore.bean.ForceDownloadData;
|
||||
import com.mjsheng.myappstore.bean.LzyResponse;
|
||||
import com.mjsheng.myappstore.bean.NetAndLaunchBean;
|
||||
import com.mjsheng.myappstore.bean.NetAndLaunchData;
|
||||
import com.mjsheng.myappstore.comm.CommonDatas;
|
||||
@@ -41,6 +38,7 @@ import com.mjsheng.myappstore.network.api.DeselectIDApi;
|
||||
import com.mjsheng.myappstore.network.api.ForceDownloadApi;
|
||||
import com.mjsheng.myappstore.network.api.NetAndLaunchApi;
|
||||
import com.mjsheng.myappstore.network.api.SystemSettingApi;
|
||||
import com.mjsheng.myappstore.network.api.newapi.GetBatchApi;
|
||||
import com.mjsheng.myappstore.utils.ApkUtils;
|
||||
import com.mjsheng.myappstore.utils.Configure;
|
||||
import com.mjsheng.myappstore.utils.MySQLData;
|
||||
@@ -66,6 +64,8 @@ import io.reactivex.schedulers.Schedulers;
|
||||
import okhttp3.Call;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import okhttp3.internal.Util;
|
||||
import retrofit2.Retrofit;
|
||||
import rx.Observable;
|
||||
import rx.functions.Action1;
|
||||
|
||||
@@ -321,11 +321,62 @@ public class InitJpushServer extends Service {
|
||||
}
|
||||
int locked = Settings.System.getInt(InitJpushServer.this.getContentResolver(), "qch_unlock_ipad", 1);
|
||||
if (locked == 0) {
|
||||
deleteOtherApp(result);
|
||||
getDeviceBatch(result);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void getDeviceBatch(final String result) {
|
||||
GetBatchApi getBatchApi = Network.getBatchApi();
|
||||
getBatchApi.getBatch(Utils.getSerial())
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<ResponseBody>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
Log.e("getDeviceBatch", "onSubscribe");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(ResponseBody responseBody) {
|
||||
String respons = "";
|
||||
com.alibaba.fastjson.JSONObject jsonObject = null;
|
||||
try {
|
||||
respons = responseBody.string();
|
||||
Log.e("getDeviceBatch", "respons:" + respons);
|
||||
jsonObject = JSON.parseObject(respons);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
int code = jsonObject.getInteger("code");
|
||||
if (code == 200) {
|
||||
String data = jsonObject.getString("data");
|
||||
List<Batch> batchList = JSON.parseArray(data, Batch.class);
|
||||
if (null != batchList && batchList.size() > 1) {
|
||||
deleteOtherApp(result);
|
||||
} else {
|
||||
Log.e("getDeviceBatch", "批次为空");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
Log.e("getDeviceBatch", "onError:" + e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
Log.e("getDeviceBatch", "onComplete");
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
//删除用户除了在应用市场的其他应用
|
||||
private void deleteOtherApp(String packageList) {
|
||||
Log.e("deleteOtherApp", "packageList:" + packageList);
|
||||
String[] result = packageList.split(",");
|
||||
@@ -745,7 +796,7 @@ public class InitJpushServer extends Service {
|
||||
.params("mac", com.blankj.utilcode.util.DeviceUtils.getMacAddress())
|
||||
.params("jpush_id", rid)
|
||||
.params("devices_version", Utils.getProperty("ro.custom.build.version", "获取失败"))
|
||||
.params("appstore_version", BuildConfig.VERSION_NAME)//设备信息版本号
|
||||
.params("appstore_version", BuildConfig.VERSION_NAME)//我的设备版本号
|
||||
.params("store_version", getAPPVersionName())//管教易版本号
|
||||
.execute(new StringCallback() {
|
||||
@Override
|
||||
|
||||
@@ -600,6 +600,7 @@ public class ApkUtils {
|
||||
this.add("com.android.dreams.basic");
|
||||
this.add("com.android.musicfx");
|
||||
this.add("com.android.email");
|
||||
this.add("com.jiaoguanyi.sysc");
|
||||
}};
|
||||
|
||||
public static List<String> show_canremove_systemapp = new ArrayList<String>() {{
|
||||
|
||||
@@ -209,5 +209,5 @@ public class Configure {
|
||||
public static final String SEND_SCREENSHOT = HTTP_TAG_HEAD_NEW + "Screenshot/addImg";
|
||||
//上传截图
|
||||
public static final String UPDATE_DEVICEINFO = HTTP_TAG_HEAD_NEW + "Mac/getInfo";
|
||||
//上传设备信息
|
||||
//上传我的设备
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ import com.mjsheng.myappstore.comm.CommonDatas;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
@@ -71,6 +72,7 @@ import java.io.LineNumberReader;
|
||||
import java.io.Reader;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.NetworkInterface;
|
||||
import java.net.SocketException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.text.DecimalFormat;
|
||||
@@ -84,6 +86,15 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.ObservableEmitter;
|
||||
import io.reactivex.ObservableOnSubscribe;
|
||||
import io.reactivex.Observer;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
|
||||
public class Utils {
|
||||
@@ -1049,20 +1060,55 @@ public class Utils {
|
||||
* 屏幕截图
|
||||
* 适用于lanucher版
|
||||
*/
|
||||
public void shotScreen() {
|
||||
public static void shotScreen(final Context context) {
|
||||
//adb截图方法
|
||||
new Thread(new Runnable() {
|
||||
Observable.create(new ObservableOnSubscribe<Integer>() {
|
||||
@Override
|
||||
public void run() {
|
||||
Log.e("whh0914", "开始屏幕截图...");
|
||||
String filepath = "/sdcard/screenShot.png";
|
||||
try {
|
||||
CmdUtil.execute("screencap -p " + filepath);
|
||||
} catch (Exception e) {
|
||||
Log.e("whh0914", "屏幕截图出现异常:" + e.toString());
|
||||
}
|
||||
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
|
||||
String filepath = context.getCacheDir().getAbsolutePath();
|
||||
long time = System.currentTimeMillis();
|
||||
int n = CmdUtil.execute("screencap -p " + filepath + File.separator + time + ".db").code;
|
||||
e.onNext(n);
|
||||
}
|
||||
}).start();
|
||||
}).subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<Integer>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(Integer integer) {
|
||||
if (integer == 0) {
|
||||
Log.e("doss", "成功");
|
||||
} else {
|
||||
Log.e("doss", "失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
Log.e("doss", "Throwable=" + e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
|
||||
}
|
||||
});
|
||||
// new Thread(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// Log.e("whh0914", "开始屏幕截图...");
|
||||
// String filepath = context.getFileStreamPath("screenshot").getAbsolutePath();
|
||||
// try {
|
||||
// CmdUtil.execute("screencap -p " + filepath);
|
||||
// } catch (Exception e) {
|
||||
// Log.e("whh0914", "屏幕截图出现异常:" + e.toString());
|
||||
// }
|
||||
// }
|
||||
// }).start();
|
||||
}
|
||||
|
||||
|
||||
@@ -1131,31 +1177,65 @@ public class Utils {
|
||||
Log.e("h_bl", "屏幕密度dpi(120 / 160 / 240):" + densityDpi);
|
||||
Log.e("h_bl", "屏幕宽度(dp):" + screenWidth);
|
||||
Log.e("h_bl", "屏幕高度(dp):" + screenHeight);
|
||||
return screenWidth + "×" + screenHeight;
|
||||
return width + "×" + height;
|
||||
}
|
||||
|
||||
public static String getMacAddress() {
|
||||
List<NetworkInterface> interfaces = null;
|
||||
try {
|
||||
interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
|
||||
for (NetworkInterface networkInterface : interfaces) {
|
||||
if (networkInterface != null && TextUtils.isEmpty(networkInterface.getName()) == false) {
|
||||
if ("wlan0".equalsIgnoreCase(networkInterface.getName())) {
|
||||
byte[] macBytes = networkInterface.getHardwareAddress();
|
||||
if (macBytes != null && macBytes.length > 0) {
|
||||
StringBuilder str = new StringBuilder();
|
||||
for (byte b : macBytes) {
|
||||
str.append(String.format("%02X:", b));
|
||||
}
|
||||
if (str.length() > 0) {
|
||||
str.deleteCharAt(str.length() - 1);
|
||||
}
|
||||
return str.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (SocketException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
|
||||
public static String getIMEI(Context context) {
|
||||
String IMEI = "unknow";
|
||||
String IMEI1, IMEI2, IMEI3;
|
||||
//获取手机设备号
|
||||
TelephonyManager TelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
||||
//8.0及以后版本获取
|
||||
// if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
|
||||
// IMEI1 = TelephonyMgr.getDeviceId();
|
||||
// } else
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
// try {
|
||||
// Method method = TelephonyMgr.getClass().getMethod("getImei");
|
||||
// IMEI2 = (String) method.invoke(TelephonyMgr);
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// Log.e("getIMEI", e.getMessage());
|
||||
// }
|
||||
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
IMEI = TelephonyMgr.getDeviceId();
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
// try {
|
||||
// Method method = TelephonyMgr.getClass().getMethod("getImei");
|
||||
// IMEI = (String) method.invoke(TelephonyMgr);
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// Log.e("getIMEI", e.getMessage());
|
||||
// }
|
||||
// IMEI = TelephonyMgr.getDeviceId();
|
||||
|
||||
// } else {//9.0到10.0获取
|
||||
IMEI = Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
|
||||
}
|
||||
Log.e("IMEI:", "IMEI: " + IMEI);
|
||||
return IMEI.toUpperCase();
|
||||
if (null == IMEI) {
|
||||
return "-";
|
||||
} else {
|
||||
return IMEI.toUpperCase();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static String getMachine(Context context) {
|
||||
@@ -1175,16 +1255,48 @@ public class Utils {
|
||||
return jsonObject.toJSONString();
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
public static String getHardware(Context context) {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
String electric = getBattery(context) + "%";
|
||||
String charging = String.valueOf(getIsCharging(context));
|
||||
int electric = getBattery(context);
|
||||
int charging = getIsCharging(context);
|
||||
String memory = Formatter.formatFileSize(context, getAvailMemory(context)) + "\t 已用" + "/" + "共" + Formatter.formatFileSize(context, getTotalMemory(context));
|
||||
String storage = getRemnantSize(context) + "/" + getDataTotalSize(context);
|
||||
// String CPU = ;
|
||||
int CPU = getNumCores();
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("electric", electric);
|
||||
jsonObject.put("charging", charging);
|
||||
jsonObject.put("memory", memory);
|
||||
jsonObject.put("storage", storage);
|
||||
jsonObject.put("CPU", CPU + "核");
|
||||
return jsonObject.toJSONString();
|
||||
}
|
||||
|
||||
private static int getNumCores() {
|
||||
// Private Class to display only CPU devices in the directory listing
|
||||
class CpuFilter implements FileFilter {
|
||||
@Override
|
||||
public boolean accept(File pathname) {
|
||||
// Check if filename is "cpu", followed by a single digit number
|
||||
if (Pattern.matches("cpu[0-9]", pathname.getName())) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
// Get directory containing CPU info
|
||||
File dir = new File("/sys/devices/system/cpu/");
|
||||
// Filter to only list the devices we care about
|
||||
File[] files = dir.listFiles(new CpuFilter());
|
||||
// Return the number of cores (virtual CPU devices)
|
||||
return files.length;
|
||||
} catch (Exception e) {
|
||||
// Default to return 1 core
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
public static int getBattery(Context context) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user