haijiang
2018-07-17 63b87b529196c056fb4d96a58eded3936d3445f2
提交
1 files deleted
10 files added
14 files modified
625 ■■■■■ changed files
.idea/gradle.xml 19 ●●●●● patch | view | raw | blame | history
.idea/misc.xml 49 ●●●●● patch | view | raw | blame | history
.idea/runConfigurations.xml 12 ●●●●● patch | view | raw | blame | history
app/build.gradle 1 ●●●● patch | view | raw | blame | history
app/release/app-release.apk patch | view | raw | blame | history
app/release/output.json 1 ●●●● patch | view | raw | blame | history
app/src/main/AndroidManifest.xml 4 ●●●● patch | view | raw | blame | history
app/src/main/java/com/moral/screen/activity/ChartActivity.java 17 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/moral/screen/activity/DeviceDataActivity.java 7 ●●●● patch | view | raw | blame | history
app/src/main/java/com/moral/screen/activity/MapActivity.java 75 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/moral/screen/common/API.java 4 ●●●● patch | view | raw | blame | history
app/src/main/java/com/moral/screen/update/ParseXmlService.java 49 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/moral/screen/update/UpdateManager.java 327 ●●●●● patch | view | raw | blame | history
app/src/main/res/layout/ac_charts_layout.xml 38 ●●●●● patch | view | raw | blame | history
app/src/main/res/layout/ac_login_layout.xml 4 ●●●● patch | view | raw | blame | history
app/src/main/res/layout/softupdate_progress.xml 11 ●●●●● patch | view | raw | blame | history
app/src/main/res/mipmap-xxxhdpi/icon.png patch | view | raw | blame | history
app/src/main/res/mipmap-xxxhdpi/icon_level1.png patch | view | raw | blame | history
app/src/main/res/mipmap-xxxhdpi/icon_level2.png patch | view | raw | blame | history
app/src/main/res/mipmap-xxxhdpi/icon_level3.png patch | view | raw | blame | history
app/src/main/res/mipmap-xxxhdpi/icon_normal.png patch | view | raw | blame | history
app/src/main/res/mipmap-xxxhdpi/icon_offline.png patch | view | raw | blame | history
app/src/main/res/mipmap-xxxhdpi/start.jpg patch | view | raw | blame | history
app/src/main/res/mipmap-xxxhdpi/start.png patch | view | raw | blame | history
app/src/main/res/values/strings.xml 7 ●●●●● patch | view | raw | blame | history
.idea/gradle.xml
New file
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="GradleSettings">
    <option name="linkedExternalProjectsSettings">
      <GradleProjectSettings>
        <option name="distributionType" value="DEFAULT_WRAPPED" />
        <option name="externalProjectPath" value="$PROJECT_DIR$" />
        <option name="modules">
          <set>
            <option value="$PROJECT_DIR$" />
            <option value="$PROJECT_DIR$/andbrickslib" />
            <option value="$PROJECT_DIR$/app" />
          </set>
        </option>
        <option name="resolveModulePerSourceSet" value="false" />
      </GradleProjectSettings>
    </option>
  </component>
</project>
.idea/misc.xml
New file
@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="NullableNotNullManager">
    <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
    <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
    <option name="myNullables">
      <value>
        <list size="4">
          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
        </list>
      </value>
    </option>
    <option name="myNotNulls">
      <value>
        <list size="4">
          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
        </list>
      </value>
    </option>
  </component>
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
    <output url="file://$PROJECT_DIR$/build/classes" />
  </component>
  <component name="ProjectType">
    <option name="id" value="Android" />
  </component>
  <component name="masterDetails">
    <states>
      <state key="ProjectJDKs.UI">
        <settings>
          <last-edited>1.8</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
    </states>
  </component>
</project>
.idea/runConfigurations.xml
New file
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RunConfigurationProducerService">
    <option name="ignoredProducers">
      <set>
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
      </set>
    </option>
  </component>
</project>
app/build.gradle
@@ -51,4 +51,5 @@
        exclude group: 'com.android.support'
    })
    compile 'com.github.lecho:hellocharts-library:1.5.8@aar'
    compile 'pub.devrel:easypermissions:0.4.0'
}
app/release/app-release.apk
Binary files differ
app/release/output.json
New file
@@ -0,0 +1 @@
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1},"path":"app-release.apk","properties":{"packageId":"com.moral.screen","split":"","minSdkVersion":"15"}}]
app/src/main/AndroidManifest.xml
@@ -23,9 +23,9 @@
    <application
        android:name=".MainApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:icon="@mipmap/icon"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:roundIcon="@mipmap/icon"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:icon">
app/src/main/java/com/moral/screen/activity/ChartActivity.java
@@ -61,7 +61,7 @@
    private List<PointValue> mPointValues = new ArrayList<>();
    private List<AxisValue> mAxisXValues = new ArrayList<>();
    private TextView tv_sub;
    private TextView tv_sub,tv_unit;
    private String sensorKey, mac, name, unit;
    private float maxValue;
@@ -101,7 +101,9 @@
        initTopBar();
        tv_title.setText("动态走势");
        tv_sub = findView(R.id.tv_sub);
        tv_unit = findView(R.id.tv_unit);
        tv_sub.setText(name + "动态走势图");
        tv_unit.setText("单位:" + unit);
        chartView = findView(R.id.chart);
        initLineChart();
    }
@@ -150,11 +152,12 @@
        data.setLines(lines);
        data.setValueLabelBackgroundColor(Color.TRANSPARENT);//此处设置坐标点旁边的文字背景
        data.setValueLabelBackgroundEnabled(false);
        data.setValueLabelsTextColor(Color.GRAY);
        data.setValueLabelsTextColor(Color.WHITE);
        data.setValueLabelTextSize(8);
        //坐标轴
        axisX = new Axis(); //X轴
        axisX.setHasTiltedLabels(true);  //X坐标轴字体是斜的显示还是直的,true是斜的显示
        axisX.setHasTiltedLabels(false);  //X坐标轴字体是斜的显示还是直的,true是斜的显示
        axisX.setName("实时数据");  //表格名称
        axisX.setTextSize(8);//设置字体大小
        axisX.setTextColor(getResources().getColor(R.color.blue_txt));
@@ -170,12 +173,12 @@
        axisY = Axis.generateAxisFromRange((float) 0.0, maxValue == 0 ? 100 : maxValue, maxValue == 0 ? 10 : maxValue / 16);  //Y轴
//        axisY = new Axis();
        axisY.setAutoGenerated(false);
        AxisValueFormatter yvalue = new SimpleAxisValueFormatter(1);
        axisY.setFormatter(yvalue);
//        AxisValueFormatter yvalue = new SimpleAxisValueFormatter(1);
//        axisY.setFormatter(yvalue);
        axisY.setHasLines(true);
        axisY.setHasSeparationLine(true);
        axisY.setName("单位:" + unit);//y轴标注
        axisY.setTextSize(10);//设置字体大小
        axisY.setName("            ");//y轴标注
        axisY.setTextSize(8);//设置字体大小
        axisY.setTextColor(getResources().getColor(R.color.blue_txt));
        axisY.setLineColor(getResources().getColor(R.color.blue_txt));
        data.setAxisYLeft(axisY);  //Y轴设置在左边
app/src/main/java/com/moral/screen/activity/DeviceDataActivity.java
@@ -136,7 +136,12 @@
                ArrayList<DeviceDataBean> temp = (ArrayList<DeviceDataBean>) FastJsonTools.getArrayJson(res,DeviceDataBean.class);
                if(temp!=null){
                    dataList.clear();
                    dataList.addAll(temp);
                    for (DeviceDataBean data: temp){
                        if(!("e23".equals(data.getSensor_key())||"e24".equals(data.getSensor_key())||"warn".equals(data.getSensor_key()))){
                            dataList.add(data);
                        }
                    }
                }
                adapter.notifyDataSetChanged();
            }
app/src/main/java/com/moral/screen/activity/MapActivity.java
@@ -1,8 +1,12 @@
package com.moral.screen.activity;
import android.Manifest;
import android.content.Intent;
import android.graphics.Point;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Looper;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -28,17 +32,22 @@
import com.moral.screen.model.DeviceBean;
import com.moral.screen.R;
import com.moral.screen.base.BaseActivity;
import com.moral.screen.update.UpdateManager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import pub.devrel.easypermissions.AfterPermissionGranted;
import pub.devrel.easypermissions.EasyPermissions;
/**
 * Created by hjzhang on 2018/7/2.
 */
public class MapActivity extends BaseActivity {
public class MapActivity extends BaseActivity implements EasyPermissions.PermissionCallbacks{
    private TextView tv_left,tv_right;
    private MapView bmapView;
    private BaiduMap mBaiduMap;
@@ -128,6 +137,14 @@
    protected void initData() {
        getData(true);
        showData();
        /**
         * 版本更新
         */
        if (Build.VERSION.SDK_INT >= 11) {
            new checkUpdateTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        } else {
            new checkUpdateTask().execute();
        }
    }
    @Override
@@ -211,7 +228,8 @@
                        .zIndex(i);
            }
            // 掉下动画
            mo.animateType(MarkerOptions.MarkerAnimateType.grow);
            if(show)
               mo.animateType(MarkerOptions.MarkerAnimateType.grow);
            mMarker = (Marker) (mBaiduMap.addOverlay(mo));
            mkList.add(mMarker);
        }
@@ -287,4 +305,57 @@
        });
    }
    @Override
    public void onPermissionsGranted(int requestCode, List<String> perms) {
        if (requestCode == WRITE_EXTERNAL_STORAGE) {
            manager.showNoticeDialog();
        }
    }
    @Override
    public void onPermissionsDenied(int requestCode, List<String> perms) {
    }
    private final static int WRITE_EXTERNAL_STORAGE = 0x01;
    @AfterPermissionGranted(WRITE_EXTERNAL_STORAGE)
    public void updateAPP() {
        String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
        if (EasyPermissions.hasPermissions(this, perms)) {
            // Already have permission, do the thing
            manager.showNoticeDialog();
        } else {
            // Do not have permissions, request them now
            EasyPermissions.requestPermissions(this, "温馨提示,版本升级需要写存储权限!",
                    WRITE_EXTERNAL_STORAGE, perms);
        }
    }
    UpdateManager manager = new UpdateManager(MapActivity.this);
    private class checkUpdateTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {
            Looper.prepare();
            // 检查软件更新
            manager.checkUpdateJson();
            Looper.loop();
            return null;
        }
        @Override
        protected void onPostExecute(String result) {
        }
        @Override
        protected void onPreExecute() {
        }
        @Override
        protected void onProgressUpdate(Void... values) {
        }
    }
}
app/src/main/java/com/moral/screen/common/API.java
@@ -5,10 +5,10 @@
 */
public class API {
    public static final String BASE_HTTP = "http://192.168.1.101:8090/screen_api_v2";
    public static final String BASE_HTTP = "http://monitor-api2.7drlb.com";
    public static final String LOGIN = BASE_HTTP+"/mobile/login";
    public static final String DEVICES = BASE_HTTP+"/mobile/devices";
    public static final String SENSORS = BASE_HTTP+"/mobile/sensors";
    public static final String SENSOR = BASE_HTTP+"/mobile/sensor";
    public final static String UPDATE = "http://www.7drlb.com/apps/screen_app.json";//获取版本号
}
app/src/main/java/com/moral/screen/update/ParseXmlService.java
New file
@@ -0,0 +1,49 @@
package com.moral.screen.update;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.util.HashMap;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
/**
 * Created by bin.shen on 6/25/16.
 */
public class ParseXmlService {
    public HashMap<String, String> parseXml(String uri) throws Exception {
        HashMap<String, String> hashMap = new HashMap<String, String>();
        // 实例化一个文档构建器工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 通过文档构建器工厂获取一个文档构建器
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 通过文档通过文档构建器构建一个文档实例
        Document document = builder.parse(uri);
        //获取XML文件根节点
        Element root = document.getDocumentElement();
        //获得所有子节点
        NodeList childNodes = root.getChildNodes();
        for (int j = 0; j < childNodes.getLength(); j++) {
            //遍历子节点
            Node childNode = (Node) childNodes.item(j);
            if (childNode.getNodeType() == Node.ELEMENT_NODE) {
                Element childElement = (Element) childNode;
                if ("version".equals(childElement.getNodeName())) { //版本号
                    hashMap.put("version",childElement.getFirstChild().getNodeValue());
                } else if (("name".equals(childElement.getNodeName()))) { //软件名称
                    hashMap.put("name",childElement.getFirstChild().getNodeValue());
                } else if (("url".equals(childElement.getNodeName()))) { //下载地址
                    hashMap.put("url",childElement.getFirstChild().getNodeValue());
                } else if (("message".equals(childElement.getNodeName()))) { //消息内容
                    hashMap.put("message",childElement.getFirstChild().getNodeValue());
                }
            }
        }
        return hashMap;
    }
}
app/src/main/java/com/moral/screen/update/UpdateManager.java
New file
@@ -0,0 +1,327 @@
package com.moral.screen.update;
/**
 * Created by bin.shen on 6/25/16.
 */
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;
import com.moral.screen.MainActivity;
import com.moral.screen.R;
import com.moral.screen.activity.MapActivity;
import com.moral.screen.common.API;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
public class UpdateManager {
    /* 下载中 */
    private static final int DOWNLOAD = 1;
    /* 下载结束 */
    private static final int DOWNLOAD_FINISH = 2;
    /* 保存解析的XML信息 */
    HashMap<String, String> mHashMap;
    /* 下载保存路径 */
    private String mSavePath;
    /* 记录进度条数量 */
    private int progress;
    /* 是否取消更新 */
    private boolean cancelUpdate = false;
    private MapActivity mActivity;
    /* 更新进度条 */
    private ProgressBar mProgress;
    private Dialog mDownloadDialog;
    private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                // 正在下载
                case DOWNLOAD:
                    // 设置进度条位置
                    mProgress.setProgress(progress);
                    break;
                case DOWNLOAD_FINISH:
                    // 安装文件
                    installApk();
                    break;
                default:
                    break;
            }
        }
    };
    public UpdateManager(MapActivity activity) {
        this.mActivity = activity;
    }
    /**
     * 检测软件更新
     */
    public void checkUpdateJson() {
        String data = getUrlData(API.UPDATE);
        try {
            JSONObject resJosn = new JSONObject(data);
            mHashMap = new HashMap<>();
            mHashMap.put("version", resJosn.optString("version"));
            mHashMap.put("name", resJosn.optString("name"));
            mHashMap.put("message", "");
            mHashMap.put("url", resJosn.optString("url"));
            if (isUpdate()) {
                if (Build.VERSION.SDK_INT >= 23) {
                    mActivity.updateAPP();
                } else {
                    // 显示提示对话框
                    showNoticeDialog();
                }
            } else {
//                Log.d("haijiang","已经是最新版本");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 检查软件是否有更新版本
     *
     * @return
     */
    private boolean isUpdate() {
        // 获取当前软件版本
        int versionCode = getVersionCode(mActivity);
        if (null != mHashMap) {
            int serviceCode = Integer.valueOf(mHashMap.get("version"));
            // 版本判断
            if (serviceCode > versionCode) {
                return true;
            }
        }
        return false;
    }
    /**
     * 获取软件版本号
     *
     * @param context
     * @return
     */
    private int getVersionCode(Context context) {
        int versionCode = 0;
        try {
            // 获取软件版本号,对应AndroidManifest.xml下android:versionCode
            versionCode = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
        return versionCode;
    }
    /**
     * 显示软件更新对话框
     */
    public void showNoticeDialog() {
        String message = mHashMap.get("message");
        // 构造对话框
        Builder builder = new Builder(mActivity);
        builder.setTitle(R.string.soft_update_title);
        if (message == null || message.isEmpty()) {
            builder.setMessage(R.string.soft_update_info);
        } else {
            builder.setMessage(message);
        }
        // 更新
        builder.setPositiveButton(R.string.soft_update_updatebtn, new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                // 显示下载对话框
                showDownloadDialog();
            }
        });
        // 稍后更新
        builder.setNegativeButton(R.string.soft_update_later, new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        Dialog noticeDialog = builder.create();
        noticeDialog.setCanceledOnTouchOutside(false);
        noticeDialog.show();
    }
    /**
     * 显示软件下载对话框
     */
    private void showDownloadDialog() {
        // 构造软件下载对话框
        Builder builder = new Builder(mActivity);
        builder.setTitle(R.string.soft_updating);
        // 给下载对话框增加进度条
        final LayoutInflater inflater = LayoutInflater.from(mActivity);
        View v = inflater.inflate(R.layout.softupdate_progress, null);
        mProgress = (ProgressBar) v.findViewById(R.id.update_progress);
        builder.setView(v);
        // 取消更新
        builder.setNegativeButton(R.string.soft_update_cancel, new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                // 设置取消状态
                cancelUpdate = true;
            }
        });
        mDownloadDialog = builder.create();
        mDownloadDialog.show();
        // 现在文件
        downloadApk();
    }
    /**
     * 下载apk文件
     */
    private void downloadApk() {
        // 启动新线程下载软件
        new downloadApkThread().start();
    }
    /**
     * 下载文件线程
     *
     * @author coolszy
     * @date 2012-4-26
     * @blog http://blog.92coding.com
     */
    private class downloadApkThread extends Thread {
        @Override
        public void run() {
            try {
                // 判断SD卡是否存在,并且是否具有读写权限
                //if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                // 获得存储卡的路径
                //String sdpath = Environment.getExternalStorageDirectory() + "/";
                //mSavePath = sdpath + "download";
                mSavePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
                URL url = new URL(mHashMap.get("url"));
                // 创建连接
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.connect();
                // 获取文件大小
                int length = conn.getContentLength();
                // 创建输入流
                InputStream is = conn.getInputStream();
                File file = new File(mSavePath);
                // 判断文件目录是否存在
                if (!file.exists()) {
                    file.mkdir();
                }
                File apkFile = new File(mSavePath, mHashMap.get("name"));
                FileOutputStream fos = new FileOutputStream(apkFile);
                int count = 0;
                // 缓存
                byte buf[] = new byte[1024];
                // 写入到文件中
                do {
                    int numread = is.read(buf);
                    count += numread;
                    // 计算进度条位置
                    progress = (int) (((float) count / length) * 100);
                    // 更新进度
                    mHandler.sendEmptyMessage(DOWNLOAD);
                    if (numread <= 0) {
                        // 下载完成
                        mHandler.sendEmptyMessage(DOWNLOAD_FINISH);
                        break;
                    }
                    // 写入文件
                    fos.write(buf, 0, numread);
                } while (!cancelUpdate);// 点击取消就停止下载.
                fos.close();
                is.close();
                //}
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 取消下载对话框显示
            mDownloadDialog.dismiss();
        }
    }
    ;
    /**
     * 安装APK文件
     */
    private void installApk() {
        File apkfile = new File(mSavePath, mHashMap.get("name"));
        if (!apkfile.exists()) {
            return;
        }
        // 通过Intent安装APK文件
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
        mActivity.startActivity(i);
    }
    public static String getUrlData(String path) {
        BufferedReader br = null;
        StringBuffer sb = new StringBuffer();
        HttpURLConnection connection = null;
        try {
            URL url = new URL(path);
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(8000);
            connection.setReadTimeout(8000);
            br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String s = null;
            while ((s = br.readLine()) != null) {
                sb.append(s);
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
        }
        return sb.toString();
    }
}
app/src/main/res/layout/ac_charts_layout.xml
@@ -5,49 +5,59 @@
    android:background="@mipmap/bg"
    android:fitsSystemWindows="true"
    android:orientation="vertical">
    <include layout="@layout/top_bar_layout"/>
    <include layout="@layout/top_bar_layout" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginLeft="@dimen/x8"
        android:layout_marginRight="@dimen/x8"
        android:layout_marginTop="@dimen/x20"
        android:padding="@dimen/x10"
        android:background="@mipmap/bg_chart">
        android:background="@mipmap/bg_chart"
        android:orientation="vertical"
        android:padding="@dimen/x10">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:gravity="center_vertical"
            android:orientation="horizontal">
            <ImageView
                android:layout_width="@dimen/x10"
                android:layout_height="@dimen/x10"
                android:src="@mipmap/icon_yuan"/>
                android:src="@mipmap/icon_yuan" />
            <TextView
                android:id="@+id/tv_sub"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/white"
                android:textSize="16sp"
                android:layout_gravity="center_horizontal"
                android:text="PM2.5走势图"
                android:layout_marginRight="@dimen/x4"
                android:layout_marginLeft="@dimen/x4"
                />
                android:layout_marginRight="@dimen/x4"
                android:text="PM2.5走势图"
                android:textColor="@color/white"
                android:textSize="16sp" />
            <ImageView
                android:layout_width="@dimen/x10"
                android:layout_height="@dimen/x10"
                android:src="@mipmap/icon_xia"/>
                android:src="@mipmap/icon_xia" />
        </LinearLayout>
        <TextView
            android:id="@+id/tv_unit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/blue_txt"
            android:textSize="14sp" />
        <lecho.lib.hellocharts.view.LineChartView
            android:id="@+id/chart"
            android:layout_width="match_parent"
            android:layout_marginTop="@dimen/x8"
            android:layout_height="@dimen/y300">
        </lecho.lib.hellocharts.view.LineChartView>
            android:layout_height="@dimen/y300"
            android:layout_marginTop="@dimen/x8"/>
    </LinearLayout>
</LinearLayout>
app/src/main/res/layout/ac_login_layout.xml
@@ -22,7 +22,7 @@
        android:textSize="16sp"
        android:textColor="@color/white"
        android:textColorHint="@color/white"
        android:hint="请输入您的手机号"
        android:hint="请输入账号"
        android:gravity="center"
        android:background="@mipmap/button1"/>
    <EditText
@@ -36,7 +36,7 @@
        android:textSize="16sp"
        android:textColor="@color/white"
        android:textColorHint="@color/white"
        android:hint="请输入您的密码"
        android:hint="请输入密码"
        android:gravity="center"
        android:background="@mipmap/button1"/>
    <Button
app/src/main/res/layout/softupdate_progress.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <ProgressBar
        android:id="@+id/update_progress"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal" />
</LinearLayout>
app/src/main/res/mipmap-xxxhdpi/icon.png
app/src/main/res/mipmap-xxxhdpi/icon_level1.png

app/src/main/res/mipmap-xxxhdpi/icon_level2.png

app/src/main/res/mipmap-xxxhdpi/icon_level3.png

app/src/main/res/mipmap-xxxhdpi/icon_normal.png

app/src/main/res/mipmap-xxxhdpi/icon_offline.png

app/src/main/res/mipmap-xxxhdpi/start.jpg
Binary files differ
app/src/main/res/mipmap-xxxhdpi/start.png
app/src/main/res/values/strings.xml
@@ -1,3 +1,10 @@
<resources>
    <string name="app_name">大气智慧监测</string>
    <string name="soft_update_no">已经是最新版本</string>
    <string name="soft_update_title">软件更新</string>
    <string name="soft_update_info">检测到新版本,立即更新吗?</string>
    <string name="soft_update_updatebtn">更新</string>
    <string name="soft_update_later">稍后更新</string>
    <string name="soft_updating">正在更新</string>
    <string name="soft_update_cancel">取消</string>
</resources>