From 63ed5723858f3d93500940c708fad44284222c9c Mon Sep 17 00:00:00 2001 From: Administrator <981964879@qq.com> Date: Tue, 8 Sep 2020 15:07:09 +0800 Subject: [PATCH] =?UTF-8?q?version:=20update:2020.09.07=20fix:=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E4=B8=8D=E9=9C=80=E8=A6=81=E6=98=BE=E7=A4=BA=E7=9A=84?= =?UTF-8?q?toast=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=AB=98=E5=BE=B7=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E5=AE=9A=E4=BD=8D=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E8=AE=BE=E5=A4=87=E8=8E=B7=E5=8F=96=E8=AF=A6=E7=BB=86?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=20add:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 6 +- .../myappstore/activity/MainActivity.java | 183 ++++++------ .../myappstore/network/HTTPInterface.java | 30 ++ .../mjsheng/myappstore/network/Network.java | 17 +- .../network/api/newapi/UpdateDeviceInfo.java | 19 ++ .../myappstore/receiver/MyJPushReceiver.java | 5 + .../myappstore/server/InitJpushServer.java | 20 +- .../mjsheng/myappstore/utils/ApkUtils.java | 6 +- .../mjsheng/myappstore/utils/Configure.java | 5 +- .../com/mjsheng/myappstore/utils/Utils.java | 280 +++++++++++++++++- 10 files changed, 454 insertions(+), 117 deletions(-) create mode 100644 app/src/main/java/com/mjsheng/myappstore/network/api/newapi/UpdateDeviceInfo.java diff --git a/app/build.gradle b/app/build.gradle index 8dca54f..e581bc5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -88,8 +88,8 @@ android { } newl { flavorDimensions "default" - versionCode 150 - versionName "1.0.5" + versionCode 153 + versionName "1.0.8" /*********************************极光推送************************************/ manifestPlaceholders = [ JPUSH_PKGNAME: "com.jiaoguanyi.appstore", @@ -234,5 +234,5 @@ dependencies { implementation 'com.hjq:xxpermissions:6.0' - + implementation 'com.amap.api:location:5.1.0' } diff --git a/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java b/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java index ec5385e..33e97d8 100644 --- a/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java +++ b/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java @@ -27,11 +27,13 @@ import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.Log; +import android.view.KeyEvent; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.Toast; import com.alibaba.fastjson.JSON; import com.arialyy.aria.core.Aria; @@ -229,6 +231,10 @@ public class MainActivity extends AppCompatActivity { allIntent.setAction(Utils.DOWNLOAD_ALLTASK_ACTION); sendBroadcast(allIntent); // CmdUtil.execute(" screencap -p /sdcard/" + "screen" + System.currentTimeMillis() + ".png"); + + Utils.getMachine(this); + Utils.getHardware(this); +// Utils.queryStorage(); } //获取教管易版本号 @@ -246,7 +252,7 @@ public class MainActivity extends AppCompatActivity { } synchronized public void sendMACaddress() { - String devices_version = Utils.getProperty("ro.custom.build.version", "获取失败"); + String devices_version = Utils.getProperty("ro.custom.build.version", "获取失败");//获取自定义版本 String rid = JPushInterface.getRegistrationID(MainActivity.this); OkGo.post(Configure.SEND_DEVICES) .params("sn", Utils.getSerial()) @@ -739,7 +745,7 @@ public class MainActivity extends AppCompatActivity { Intent allIntent = new Intent(); allIntent.setAction(Utils.DOWNLOAD_ALLTASK_ACTION); sendBroadcast(allIntent); - loadHeadImg(Configure.HTTP_TAG_HOME_PAGE_URL); +// loadHeadImg(Configure.HTTP_TAG_HOME_PAGE_URL); getLockedState(mHandler); // MyApplication.getInstance().getWhitePackageList(); getInfo(mHandler); @@ -776,86 +782,86 @@ public class MainActivity extends AppCompatActivity { });// 请求方式和请求url } - private void loadHeadImg(String URL) { - BrankPicApi brankPicApi = Network.getBrankPicApi(); - brankPicApi.getBrankPicApi(Configure.HTTP_KEY, Utils.getSerial(), "1") - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(CommonPicBean projectPicBean) { - paraData(projectPicBean); - Log.e("mjsheng", "brankPicApi---" + projectPicBean.toString()); - } - - @Override - public void onError(Throwable e) { -// Utils.showToast(MainActivity.this, "网络出错!"); - Log.e("mjsheng", "brankPicApi---error----" + e.getMessage()); - - } - - @Override - public void onComplete() { - - } - }); - - - } - - private void paraData(CommonPicBean categoryPicBean) { - int code = categoryPicBean.getCode(); - switch (code) { - case 200: - final List data = categoryPicBean.getData(); -// if (data != null && data.size() > 0) { -// List list = new ArrayList<>(); -// for (int i = 0; i < data.size(); i++) { -// list.add(data.get(i).getImg()); +// private void loadHeadImg(String URL) { +// BrankPicApi brankPicApi = Network.getBrankPicApi(); +// brankPicApi.getBrankPicApi(Configure.HTTP_KEY, Utils.getSerial(), "1") +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// // } -// webBannerAdapter = new WebBannerAdapter(getActivity(), list); -// webBannerAdapter.setOnBannerItemClickListener(new BannerLayout.OnBannerItemClickListener() { -// @Override -// public void onItemClick(int position) { -// loadProjectByType(Configure.HTTP_TAG_BRAND_DETAILS_URL, data.get(position).getId(), data.get(position).getName()); -// } -// }); -// recyclerBanner.setAdapter(webBannerAdapter); -// mAdapter = new TopRecyclerViewAdapter(getActivity(), "home", list, new TopRecyclerViewAdapter.HorizontalScrollViewListener() { -// @Override -// public void onClick(String iconUrl, int position) { -// sound.playSoundEffect(); -// loadProjectByType(Configure.HTTP_TAG_BRAND_DETAILS_URL, data.get(position).getId(), data.get(position).getName()); -// } -// }); -// mTopRlView.setAdapter(mAdapter); -// } else { -// // Utils.showToast(getContext(), "数据为空!"); -// Log.e("mjsheng", "推荐页轮播图为空!"); -// } - break; - case -200: - paraError(categoryPicBean.getMsg()); - break; - } - } +// +// @Override +// public void onNext(CommonPicBean projectPicBean) { +// paraData(projectPicBean); +// Log.e("mjsheng", "brankPicApi---" + projectPicBean.toString()); +// } +// +// @Override +// public void onError(Throwable e) { +//// Utils.showToast(MainActivity.this, "网络出错!"); +// Log.e("mjsheng", "brankPicApi---error----" + e.getMessage()); +// +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// +// +// } - private void paraError(String msg) { - switch (msg) { - case "没有找到SN码": - ToastUtil.show(msg); - break; - default: - ToastUtil.show(msg); - break; - } - } +// private void paraData(CommonPicBean categoryPicBean) { +// int code = categoryPicBean.getCode(); +// switch (code) { +// case 200: +// final List data = categoryPicBean.getData(); +//// if (data != null && data.size() > 0) { +//// List list = new ArrayList<>(); +//// for (int i = 0; i < data.size(); i++) { +//// list.add(data.get(i).getImg()); +//// } +//// webBannerAdapter = new WebBannerAdapter(getActivity(), list); +//// webBannerAdapter.setOnBannerItemClickListener(new BannerLayout.OnBannerItemClickListener() { +//// @Override +//// public void onItemClick(int position) { +//// loadProjectByType(Configure.HTTP_TAG_BRAND_DETAILS_URL, data.get(position).getId(), data.get(position).getName()); +//// } +//// }); +//// recyclerBanner.setAdapter(webBannerAdapter); +//// mAdapter = new TopRecyclerViewAdapter(getActivity(), "home", list, new TopRecyclerViewAdapter.HorizontalScrollViewListener() { +//// @Override +//// public void onClick(String iconUrl, int position) { +//// sound.playSoundEffect(); +//// loadProjectByType(Configure.HTTP_TAG_BRAND_DETAILS_URL, data.get(position).getId(), data.get(position).getName()); +//// } +//// }); +//// mTopRlView.setAdapter(mAdapter); +//// } else { +//// // Utils.showToast(getContext(), "数据为空!"); +//// Log.e("mjsheng", "推荐页轮播图为空!"); +//// } +// break; +// case -200: +// paraError(categoryPicBean.getMsg()); +// break; +// } +// } + +// private void paraError(String msg) { +// switch (msg) { +// case "没有找到SN码": +// ToastUtil.show(msg); +// break; +// default: +// ToastUtil.show(msg); +// break; +// } +// } @Override protected void onDestroy() { @@ -993,18 +999,23 @@ public class MainActivity extends AppCompatActivity { updateBuilder.check(); } - @Override - public void onBackPressed() { - lazyExit(); + // 用来计算返回键的点击间隔时间 + private long exitTime = 0; - super.onBackPressed(); + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { + lazyExit(); + return true; + } + + return super.onKeyDown(keyCode, event); } private void lazyExit() { if (System.currentTimeMillis() - mPreClickTime > 1000) { ToastUtils.showShort("再按一次,退出"); mPreClickTime = System.currentTimeMillis(); - return; } else { finish(); } @@ -1221,7 +1232,7 @@ public class MainActivity extends AppCompatActivity { setNetAndlaunch(netAndLaunchBean); break; default: - ToastUtils.showShort(netAndLaunchBean.getMsg()); +// ToastUtils.showShort(netAndLaunchBean.getMsg()); } } diff --git a/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java b/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java index 385570c..3c5a6e7 100644 --- a/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java +++ b/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java @@ -745,4 +745,34 @@ public class HTTPInterface { // context.sendBroadcast(intent1); } + +// public void updateDeviceInfo(Context context) { +// UpdateDeviceInfo updateDeviceInfo = Network.getUpdateDeviceInfo(); +// +// updateDeviceInfo.updateDeviceInfo() +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(ResponseBody responseBody) { +// +// } +// +// @Override +// public void onError(Throwable e) { +// +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } + } \ No newline at end of file diff --git a/app/src/main/java/com/mjsheng/myappstore/network/Network.java b/app/src/main/java/com/mjsheng/myappstore/network/Network.java index 953ccc1..94283e5 100644 --- a/app/src/main/java/com/mjsheng/myappstore/network/Network.java +++ b/app/src/main/java/com/mjsheng/myappstore/network/Network.java @@ -19,6 +19,7 @@ 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.GetLockState; +import com.mjsheng.myappstore.network.api.newapi.UpdateDeviceInfo; import java.io.File; import java.util.concurrent.TimeUnit; @@ -64,7 +65,7 @@ public class Network { private static ForceDownloadApi forceDownloadApi; private static GetLockState getLockState; - + private static UpdateDeviceInfo updateDeviceInfo; private static final long cacheSize = 1024 * 1024 * 20;// 缓存文件最大限制大小20M private static String cacheDirectory = Environment.getExternalStorageDirectory() + "/okttpcaches"; // 设置缓存文件路径 @@ -269,4 +270,18 @@ public class Network { return getLockState; } + public static UpdateDeviceInfo getUpdateDeviceInfo() { + if (updateDeviceInfo == null) { + Retrofit retrofit = new Retrofit.Builder() + .client(cacheClient) + .baseUrl(ROOT_URL) + .addConverterFactory(gsonConverterFactory) + .addCallAdapterFactory(rxJavaCallAdapterFactory) + .build(); + updateDeviceInfo = retrofit.create(UpdateDeviceInfo.class); + } + return updateDeviceInfo; + } + + } diff --git a/app/src/main/java/com/mjsheng/myappstore/network/api/newapi/UpdateDeviceInfo.java b/app/src/main/java/com/mjsheng/myappstore/network/api/newapi/UpdateDeviceInfo.java new file mode 100644 index 0000000..fdef0c4 --- /dev/null +++ b/app/src/main/java/com/mjsheng/myappstore/network/api/newapi/UpdateDeviceInfo.java @@ -0,0 +1,19 @@ +package com.mjsheng.myappstore.network.api.newapi; + +import io.reactivex.Observable; +import okhttp3.ResponseBody; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.POST; + +public interface UpdateDeviceInfo { + @FormUrlEncoded + @POST("Application/getLockState") + Observable updateDeviceInfo( + @Field("sn") String sn, + @Field("key") String key, + @Field("machine") String machine, + @Field("hardware") String hardware, + @Field("address") String address + ); +} diff --git a/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java b/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java index 1baf80a..651f697 100644 --- a/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java +++ b/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java @@ -111,6 +111,11 @@ public class MyJPushReceiver extends BroadcastReceiver { private final String DEVICES_REBOOT = "22";//重启 + private final String GET_DEVICES_INFO = "23";//获取设备详细信息 + + + + private Context mContext; private int changeNum(int paramInt) { diff --git a/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java b/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java index ebd4432..8721801 100644 --- a/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java +++ b/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java @@ -378,7 +378,7 @@ public class InitJpushServer extends Service { setNetAndlaunch(netAndLaunchBean); break; default: - ToastUtils.showShort(netAndLaunchBean.getMsg()); +// ToastUtils.showShort(netAndLaunchBean.getMsg()); } } @@ -963,7 +963,7 @@ public class InitJpushServer extends Service { //摄像头开关 int setting_camera = changeNum(data.optInt("setting_camera")); Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_camera", setting_camera); - ApkUtils.hideSystemSettingAPP(InitJpushServer.this,"com.mediatek.camera"); + ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.mediatek.camera"); Log.e("SystemSetting", "setting_camera---------" + setting_camera); String cameraStatus = ""; switch (setting_camera) { @@ -1022,22 +1022,22 @@ public class InitJpushServer extends Service { //时钟 int deskclock = changeNum(data.optInt("setting_clock")); Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_deskclock", deskclock); - ApkUtils.hideSystemSettingAPP(InitJpushServer.this,"com.android.deskclock"); + ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.deskclock"); Log.e("SystemSetting", "qch_app_deskclock" + deskclock); //录音机 int soundrecorder = changeNum(data.optInt("setting_recording")); Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_soundrecorder", soundrecorder); - ApkUtils.hideSystemSettingAPP(InitJpushServer.this,"com.android.soundrecorder"); + ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.soundrecorder"); Log.e("SystemSetting", "qch_app_soundrecorder" + soundrecorder); //音乐 int music = changeNum(data.optInt("setting_music")); Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_music", music); - ApkUtils.hideSystemSettingAPP(InitJpushServer.this,"com.android.music"); + ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.music"); Log.e("SystemSetting", "qch_app_music" + music); //图库 int gallery = changeNum(data.optInt("setting_picture")); Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_gallery", gallery); - ApkUtils.hideSystemSettingAPP(InitJpushServer.this,"com.android.gallery3d"); + ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.gallery3d"); Log.e("SystemSetting", "qch_app_gallery" + gallery); //壁纸 int wallpaper = changeNum(data.optInt("setting_wallpaper")); @@ -1046,10 +1046,10 @@ public class InitJpushServer extends Service { //文件管理器 int filemanager = changeNum(data.optInt("setting_file")); Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_filemanager", filemanager); - if (Build.VERSION.SDK_INT= CommonDatas.MIN_POWER) { - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) { - Intent intent = new Intent("android.intent.action.FACTORY_RESET"); - intent.setPackage("android"); - intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); - intent.putExtra("android.intent.extra.REASON", "MasterClearConfirm"); - intent.putExtra("android.intent.extra.WIPE_EXTERNAL_STORAGE", false); - intent.putExtra("com.android.internal.intent.extra.WIPE_ESIMS", false); - context.sendBroadcast(intent); - } else { + if (BuildConfig.DEBUG) { + ToastUtil.show("收到重置设备推送消息"); + return; + } + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) { + Intent intent = new Intent("android.intent.action.FACTORY_RESET"); + intent.setPackage("android"); + intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); + intent.putExtra("android.intent.extra.REASON", "MasterClearConfirm"); + intent.putExtra("android.intent.extra.WIPE_EXTERNAL_STORAGE", false); + intent.putExtra("com.android.internal.intent.extra.WIPE_ESIMS", false); + context.sendBroadcast(intent); + } else { + //10.0的不需要最小电量 + if (getBatteryLevel(context) >= CommonDatas.MIN_POWER) { Intent intent = new Intent("android.intent.action.MASTER_CLEAR"); // intent.setPackage("com.android.settings"); context.sendBroadcast(intent); + } else { + MySQLData.SetBooleanData(context, CommonDatas.IS_RESET, true); } - } else { - MySQLData.SetBooleanData(context, CommonDatas.IS_RESET, true); } + } synchronized private static int getBatteryLevel(Context mContext) { @@ -1034,7 +1049,7 @@ public class Utils { * 屏幕截图 * 适用于lanucher版 */ - public void shotScreen() { + public void shotScreen() { //adb截图方法 new Thread(new Runnable() { @Override @@ -1097,5 +1112,242 @@ public class Utils { context.startActivity(intent); } + public static String getAndroiodScreenProperty(Context context) { + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics dm = new DisplayMetrics(); + wm.getDefaultDisplay().getRealMetrics(dm); + int width = dm.widthPixels; // 屏幕宽度(像素) + int height = dm.heightPixels; // 屏幕高度(像素) + float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5) + int densityDpi = dm.densityDpi; // 屏幕密度dpi(120 / 160 / 240) + // 屏幕宽度算法:屏幕宽度(像素)/屏幕密度 + int screenWidth = (int) (width / density); // 屏幕宽度(dp) + int screenHeight = (int) (height / density);// 屏幕高度(dp) + + + Log.e("h_bl", "屏幕宽度(像素):" + width); + Log.e("h_bl", "屏幕高度(像素):" + height); + Log.e("h_bl", "屏幕密度(0.75 / 1.0 / 1.5):" + density); + Log.e("h_bl", "屏幕密度dpi(120 / 160 / 240):" + densityDpi); + Log.e("h_bl", "屏幕宽度(dp):" + screenWidth); + Log.e("h_bl", "屏幕高度(dp):" + screenHeight); + return screenWidth + "×" + screenHeight; + } + + 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()); +// } +// } else {//9.0到10.0获取 + IMEI = Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); + } + Log.e("IMEI:", "IMEI: " + IMEI); + return IMEI.toUpperCase(); + } + + public static String getMachine(Context context) { + String device = Build.MODEL;//机型 + String imei = getIMEI(context); + String system_version = Build.VERSION.RELEASE; + String firmware_version = getProperty("ro.build.display.id", "获取失败"); + String rom = getProperty("ro.custom.build.version", "获取失败"); + String screen_rate = getAndroiodScreenProperty(context); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("device", device); + jsonObject.put("imei", imei); + jsonObject.put("system_version", system_version); + jsonObject.put("firmware_version", firmware_version); + jsonObject.put("rom", rom); + jsonObject.put("screen_rate", screen_rate); + return jsonObject.toJSONString(); + } + + public static String getHardware(Context context) { + JSONObject jsonObject = new JSONObject(); + String electric = getBattery(context) + "%"; + String charging = String.valueOf(getIsCharging(context)); + String memory = Formatter.formatFileSize(context, getAvailMemory(context)) + "\t 已用" + "/" + "共" + Formatter.formatFileSize(context, getTotalMemory(context)); + String storage = getRemnantSize(context) + "/" + getDataTotalSize(context); +// String CPU = ; + return jsonObject.toJSONString(); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public static int getBattery(Context context) { + try { + BatteryManager batteryManager = (BatteryManager) context.getSystemService(Context.BATTERY_SERVICE); + return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY); + } catch (Exception e) { + Log.e("getBattery", "getBattery" + e.getMessage()); + } + return 0; + } + + public static int getBatteryPercentage(Context context) { + + IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); + Intent batteryStatus = context.registerReceiver(null, iFilter); + + int level = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) : -1; + int scale = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1) : -1; + + float batteryPct = level / (float) scale; + + return (int) (batteryPct * 100); + } + + public static int getIsCharging(Context context) { + IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); + Intent batteryStatus = context.registerReceiver(null, ifilter); + // Are we charging / charged? + int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); + boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || + status == BatteryManager.BATTERY_STATUS_FULL; + + // How are we charging? +// int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); +// boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; +// boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; + if (isCharging) { + return 1; + } else { + return 0; + } + } + + /** + * 描述:获取可用内存. + * + * @param context + * @return + */ + public static long getAvailMemory(Context context) { + // 获取android当前可用内存大小 + ActivityManager activityManager = (ActivityManager) context + .getSystemService(Context.ACTIVITY_SERVICE); + ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); + activityManager.getMemoryInfo(memoryInfo); + // 当前系统可用内存 ,将获得的内存大小规格化 + + return memoryInfo.availMem; + } + + /** + * 描述:总内存. + * + * @param context + * @return + */ + public static long getTotalMemory(Context context) { + // 系统内存信息文件 + String file = "/proc/meminfo"; + String memInfo; + String[] strs; + long memory = 0; + + try { + FileReader fileReader = new FileReader(file); + BufferedReader bufferedReader = new BufferedReader(fileReader, 8192); + // 读取meminfo第一行,系统内存大小 + memInfo = bufferedReader.readLine(); + strs = memInfo.split("\\s+"); +// for (String str : strs) { +// L.d(AppUtil.class, str + "\t"); +// } + // 获得系统总内存,单位KB + memory = Integer.valueOf(strs[1]).intValue(); + bufferedReader.close(); + } catch (Exception e) { + e.printStackTrace(); + } + // Byte转位KB或MB + return memory * 1024; + } + + public static String formatFileSize(long fileS) { + DecimalFormat df = new DecimalFormat("#.0"); + String fileSizeString = ""; + String wrongSize = "0B"; + if (fileS == 0) { + return wrongSize; + } + if (fileS < 1024) { + fileSizeString = df.format((double) fileS) + "B"; + } else if (fileS < 1048576) { + fileSizeString = df.format((double) fileS / 1024) + "KB"; + } else if (fileS < 1073741824) { + fileSizeString = df.format((double) fileS / 1048576) + "MB"; + } else { + fileSizeString = df.format((double) fileS / 1073741824) + "GB"; + } + return fileSizeString; + } + + public static void queryStorage() { + StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getPath()); + + //存储块总数量 + long blockCount = statFs.getBlockCount(); + //块大小 + long blockSize = statFs.getBlockSize(); + //可用块数量 + long availableCount = statFs.getAvailableBlocks(); + //剩余块数量,注:这个包含保留块(including reserved blocks)即应用无法使用的空间 + long freeBlocks = statFs.getFreeBlocks(); + //这两个方法是直接输出总内存和可用空间,也有getFreeBytes + //API level 18(JELLY_BEAN_MR2)引入 + long totalSize = statFs.getTotalBytes(); + long availableSize = statFs.getAvailableBytes(); + + Log.e("statfs", "total = " + getUnit(totalSize)); + Log.e("statfs", "availableSize = " + getUnit(availableSize)); + + //这里可以看出 available 是小于 free ,free 包括保留块。 + Log.e("statfs", "total = " + getUnit(blockSize * blockCount)); + Log.e("statfs", "available = " + getUnit(blockSize * availableCount)); + Log.e("statfs", "free = " + getUnit(blockSize * freeBlocks)); + + } + + private static String[] units = {"B", "KB", "MB", "GB", "TB"}; + + /** + * 单位转换 + */ + private static String getUnit(float size) { + int index = 0; + while (size > 1024 && index < 4) { + size = size / 1024; + index++; + } + return String.format(Locale.getDefault(), " %.2f %s", size, units[index]); + } + + + public static String getDataTotalSize(Context context) { + StatFs sf = new StatFs(context.getCacheDir().getAbsolutePath()); + long blockSize = sf.getBlockSize(); + long totalBlocks = sf.getBlockCount(); + return Formatter.formatFileSize(context, blockSize * totalBlocks); + } + + public static String getRemnantSize(Context context) { + StatFs sf = new StatFs(context.getCacheDir().getAbsolutePath()); + long availableSize = sf.getAvailableBytes(); + return Formatter.formatFileSize(context, availableSize); + } }