0
0
lihuiming преди 3 години
родител
ревизия
d87d5f9ee0

+ 3 - 1
app/build.gradle

@@ -53,7 +53,9 @@ dependencies {
     implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
     implementation "org.permissionsdispatcher:permissionsdispatcher:4.3.1"//权限
     annotationProcessor "org.permissionsdispatcher:permissionsdispatcher-processor:4.3.1"//权限
-
+    implementation 'com.github.xuexiangjys:XUpdate:2.0.7'
+    implementation 'com.google.code.gson:gson:2.8.5'
+    implementation 'com.zhy:okhttputils:2.6.2'
 
     testImplementation 'junit:junit:4.12'
     implementation files('libs/moterndevicecontroller.aar')

+ 41 - 36
app/src/main/java/com/emato/ich/MainActivity.java

@@ -33,6 +33,7 @@ import androidx.navigation.ui.AppBarConfiguration;
 import androidx.navigation.ui.NavigationUI;
 
 import com.emato.ich.databinding.ActivityMainBinding;
+import com.xuexiang.xupdate.XUpdate;
 
 import android.view.Menu;
 import android.view.MenuItem;
@@ -261,48 +262,52 @@ public class MainActivity extends AppCompatActivity  {
 
         // 注册柜子信息
 
-        String appVersion = BaseUtils.getAppVersion(getApplicationContext());
-        String androidVersion = BaseUtils.getVersionName();
-        CountDownLatch countDownLatch = new CountDownLatch(10);
-        Cabinet cabinet = DeviceControl.queryCabinetInfo(countDownLatch);
-        try {
-            countDownLatch.await();
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-
-        cabinet.setClientId(clientId);
-        cabinet.setSoftwareVersion(appVersion);
-        cabinet.setAndroidVersion(androidVersion);
-        cabinet.setSoftwareType("android");
-        cabinet.setImei(BaseUtils.getIMEI(getApplicationContext()));
-        cabinet.setMacIpv4("111");
-        cabinet.setMacIpv6("unknown");
-        cabinet.setNetType("111");
-        cabinet.setPlatType("S905");
-        cabinet.setSim("111");
-        cabinet.setWifiSSid("111");
-
-        ObjectMapper objectMapper = JacksonUtils.objectmapper;
-
-        try {
-            String jsonData = objectMapper.writeValueAsString(cabinet);
-            Log.i(TAG, "onCreate: jsonData===============>" + jsonData);
-
-            MqttMessage message = new MqttMessage();
-            message.setQos(1);
-            message.setPayload(jsonData.getBytes());
-            ichPublishClient.publish(String.format(ICHTopic.CABINET_INFO_REPORT, clientId), message);
-        } catch (JsonProcessingException e) {
-            Log.e(TAG, "onCreate: 解析成JSON失败!", e);
-        }
+//        String appVersion = BaseUtils.getAppVersion(getApplicationContext());
+//        String androidVersion = BaseUtils.getVersionName();
+//        CountDownLatch countDownLatch = new CountDownLatch(10);
+//        Cabinet cabinet = DeviceControl.queryCabinetInfo(countDownLatch);
+//        try {
+//            countDownLatch.await();
+//        } catch (InterruptedException e) {
+//            e.printStackTrace();
+//        }
+//
+//        cabinet.setClientId(clientId);
+//        cabinet.setSoftwareVersion(appVersion);
+//        cabinet.setAndroidVersion(androidVersion);
+//        cabinet.setSoftwareType("android");
+//        cabinet.setImei(BaseUtils.getIMEI(getApplicationContext()));
+//        cabinet.setMacIpv4("111");
+//        cabinet.setMacIpv6("unknown");
+//        cabinet.setNetType("111");
+//        cabinet.setPlatType("S905");
+//        cabinet.setSim("111");
+//        cabinet.setWifiSSid("111");
+//
+//        ObjectMapper objectMapper = JacksonUtils.objectmapper;
+//
+//        try {
+//            String jsonData = objectMapper.writeValueAsString(cabinet);
+//            Log.i(TAG, "onCreate: jsonData===============>" + jsonData);
+//
+//            MqttMessage message = new MqttMessage();
+//            message.setQos(1);
+//            message.setPayload(jsonData.getBytes());
+//            ichPublishClient.publish(String.format(ICHTopic.CABINET_INFO_REPORT, clientId), message);
+//        } catch (JsonProcessingException e) {
+//            Log.e(TAG, "onCreate: 解析成JSON失败!", e);
+//        }
 
         // TODO 更新版本监听
         ichPublishClient.subscribe(String.format(ICHTopic.APK_UPDATE_PATH, BaseUtils.getClientId()), (msgId, msg) -> {
             try {
                 String path = new String(msg.getPayload());
                 // 发起请求下载APK
-                APKUpdateDownload.getInstance().downloadAPK(MainActivity.this, getApplication(), path);
+                XUpdate.newBuild(this)
+                        .updateUrl(path)
+                        .isAutoMode(true) //如果需要完全无人干预,自动更新,需要root权限【静默安装需要】
+                        .update();
+//                APKUpdateDownload.getInstance().downloadAPK(MainActivity.this, getApplication(), path);
             }  catch (Exception e) {
                 Log.e(TAG, "onCreate: 更新版本监听失败! ", e);
             }

+ 4 - 0
app/src/main/java/com/emato/ich/api/ICSPClient.java

@@ -237,6 +237,10 @@ public class ICSPClient {
         return builder.build();
     }
 
+    public static OkHttpClient getInstance(){
+        return ICSPClientInnerClass.CLIENT;
+    }
+
     static class ICSPClientInnerClass{
 
         private static final OkHttpClient CLIENT = new OkHttpClient.Builder().connectTimeout(60, TimeUnit.SECONDS)

+ 27 - 1
app/src/main/java/com/emato/ich/crash/CrashApplication.java

@@ -2,23 +2,49 @@ package com.emato.ich.crash;
 
 import android.app.Activity;
 import android.app.Application;
+import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.appcompat.widget.TooltipCompat;
 
 import com.cherry.sdk.controller.BuildConfig;
 import com.emato.ich.MainActivity;
+import com.emato.ich.update.UpdateService;
+import com.xuexiang.xupdate.XUpdate;
+import com.xuexiang.xupdate.entity.UpdateError;
+import com.xuexiang.xupdate.listener.OnUpdateFailureListener;
+import com.xuexiang.xupdate.proxy.IUpdateHttpService;
+import com.xuexiang.xupdate.utils.UpdateUtils;
+
+import org.jetbrains.annotations.NotNull;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 public class CrashApplication extends Application {
     private final List<Activity> mActivityList = new ArrayList<>();
-
+    private static final String TAG = CrashApplication.class.getName();
 
     @Override
     public void onCreate() {
         super.onCreate();
         UncaughtExceptionHandlerImpl.getInstance().init(getApplicationContext(), BuildConfig.DEBUG, true, 1000, MainActivity.class);
+
+        //设置版本更新出错的监听
+        XUpdate.get()
+                .debug(true)
+                .isWifiOnly(true)                                               //默认设置只在wifi下检查版本更新
+                .isGet(false)                                                    //默认设置使用get请求检查版本
+                .isAutoMode(true)                                              //默认设置非自动模式,可根据具体使用配置
+                .param("versionCode", UpdateUtils.getVersionCode(this))         //设置默认公共请求参数
+                .param("appKey", getPackageName())
+                .setOnUpdateFailureListener(error -> {
+                    Log.i(TAG, "onCreate: 自动更新失败! " + error.getCode());
+                })
+                .supportSilentInstall(true)                                     //设置是否支持静默安装,默认是true
+                .setIUpdateHttpService(new UpdateService())                     //这个必须设置!实现网络请求功能。
+                .init(this);                                                    //这个必须初始化
     }
 
     /**

+ 9 - 0
app/src/main/java/com/emato/ich/fragment/MainFragment.java

@@ -19,6 +19,7 @@ import com.emato.ich.databinding.FragmentMainBinding;
 import com.emato.ich.entity.vo.ShellVo;
 import com.emato.ich.utils.BaseUtils;
 import com.emato.ich.utils.StringUtils;
+import com.xuexiang.xupdate.XUpdate;
 
 import org.jetbrains.annotations.NotNull;
 
@@ -80,6 +81,14 @@ public class MainFragment extends Fragment {
         // 取件页面跳转
         binding.takeBtn.setOnClickListener(view1 -> NavHostFragment.findNavController(MainFragment.this)
                 .navigate(R.id.action_mainFragment_to_takeFragment));
+
+        binding.update.setOnClickListener(view1 -> {
+
+            XUpdate.newBuild(getActivity())
+                    .updateUrl("http://icsp-testend.ds-bay.com/config/cabinet/upgradeByXUpdate")
+                    .isAutoMode(true) //如果需要完全无人干预,自动更新,需要root权限【静默安装需要】
+                    .update();
+        });
     }
 
     @Override

+ 115 - 0
app/src/main/java/com/emato/ich/update/UpdateService.java

@@ -0,0 +1,115 @@
+package com.emato.ich.update;
+
+import androidx.annotation.NonNull;
+
+import com.emato.ich.api.ICSPClient;
+import com.emato.ich.utils.BaseUtils;
+import com.xuexiang.xupdate.XUpdate;
+import com.xuexiang.xupdate.proxy.IUpdateHttpService;
+import com.zhy.http.okhttp.OkHttpUtils;
+import com.zhy.http.okhttp.callback.FileCallBack;
+import com.zhy.http.okhttp.callback.StringCallback;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.Request;
+import okhttp3.Response;
+
+public class UpdateService implements IUpdateHttpService {
+    @Override
+    public void asyncGet(@NonNull @NotNull String url, @NonNull @NotNull Map<String, Object> params, @NonNull @NotNull Callback callBack) {
+        OkHttpUtils.get()
+                .url(url)
+                .addParams("clientId", BaseUtils.getClientId())
+                .build()
+                .execute(new StringCallback() {
+                    @Override
+                    public void onError(Call call, Exception e, int id) {
+                        callBack.onError(e);
+                    }
+
+                    @Override
+                    public void onResponse(String response, int id) {
+                        callBack.onSuccess(response);
+                    }
+                });
+    }
+
+    private Map<String, String> transform(Map<String, Object> params) {
+        Map<String, String> map = new HashMap<>();
+        params.keySet().forEach(key -> {
+            map.put(key, String.valueOf(params.get(key)));
+        });
+        map.put("clientId", BaseUtils.getClientId());
+        return map;
+    }
+
+    @Override
+    public void asyncPost(@NonNull @NotNull String url, @NonNull @NotNull Map<String, Object> params, @NonNull @NotNull Callback callBack) {
+
+        OkHttpUtils.post()
+//                .params(transform(params))
+                .url(url)
+//                .addParams("clientId", BaseUtils.getClientId())
+                .addParams("clientId", "285F18D92D0B6568")
+                .build()
+                .execute(new StringCallback() {
+                    @Override
+                    public void onError(Call call, Exception e, int id) {
+                        callBack.onError(e);
+                        onResponse("", 1);
+                    }
+
+                    @Override
+                    public void onResponse(String response, int id) {
+                        response = "{\"Code\":0,\"Msg\":\"\",\"UpdateStatus\":2,\"VersionCode\":3,\"VersionName\":\"1.0.2\",\"ModifyContent\":\"1、优化api接口。\\r\\n2、添加使用demo演示。\\r\\n3、新增自定义更新服务API接口。\\r\\n4、优化更新提示界面。\",\"DownloadUrl\":\"http://icsp-api.ds-bay.com/profile/app-release.apk\",\"ApkSize\":10759906,\"ApkMd5\":\"3452dfgdg\"}";
+                        callBack.onSuccess(response);
+                    }
+                });
+
+    }
+
+    @Override
+    public void download(@NonNull @NotNull String url, @NonNull @NotNull String path, @NonNull @NotNull String fileName, @NonNull @NotNull DownloadCallback callback) {
+
+        OkHttpUtils.get()
+                .url(url)
+                .tag(url)
+                .build()
+                .execute(new FileCallBack(path, fileName) {
+                    @Override
+                    public void inProgress(float progress, long total, int id) {
+                        callback.onProgress(progress, total);
+                    }
+
+                    @Override
+                    public void onBefore(Request request, int id) {
+                        callback.onStart();
+                    }
+
+                    @Override
+                    public void onError(Call call, Exception e, int id) {
+                        callback.onError(e);
+                    }
+
+                    @Override
+                    public void onResponse(File response, int id) {
+                        callback.onSuccess(response);
+                    }
+                });
+
+    }
+
+    @Override
+    public void cancelDownload(@NonNull @NotNull String url) {
+
+    }
+}

+ 1 - 1
app/src/main/java/com/emato/ich/utils/BaseUtils.java

@@ -112,7 +112,7 @@ public class BaseUtils {
 
     public static String getClientId() {
         return Md5Utils.string2Md5_16(getMac()).toUpperCase();
-//        return "285F18D92D0B6568";
+//        return "285F18D92D0B6568";8F00B204E9800998
     }
 
     public static String getMac2() {

+ 8 - 0
app/src/main/res/layout/fragment_main.xml

@@ -45,5 +45,13 @@
         android:layout_y="371dp"
         android:background="@drawable/e_mp_qrcode_8x8_backup" />
 
+    <Button
+        android:id="@+id/update"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_x="47dp"
+        android:layout_y="300dp"
+        android:text="update" />
+
 
 </AbsoluteLayout>

+ 2 - 0
build.gradle

@@ -3,6 +3,7 @@ buildscript {
     repositories {
         google()
         mavenCentral()
+        maven { url "https://jitpack.io" }
     }
     dependencies {
         classpath "com.android.tools.build:gradle:4.2.1"
@@ -17,6 +18,7 @@ allprojects {
         google()
         mavenCentral()
         jcenter() // Warning: this repository is going to shut down soon
+        maven { url "https://jitpack.io" }
     }
 }