From ea6ce17bf3272259295adccbad85583079b5bac0 Mon Sep 17 00:00:00 2001
From: Runt <qingingrunt2010@qq.com>
Date: Wed, 22 Feb 2023 14:14:41 +0000
Subject: [PATCH] api调用

---
 app/src/main/java/com/auto/lyric/data/DeviceInfo.java               |   78 +++++++++++++++++++
 app/src/main/java/com/auto/lyric/MainActivity.java                  |   12 ++
 app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java      |    6 +
 app/src/main/java/com/auto/lyric/vm/MainViewModel.java              |   48 ++++++++++++
 app/src/main/java/com/auto/lyric/retrofit/api/CommonApiCenter.java  |   19 ++++
 app/src/main/java/com/auto/lyric/util/DeviceUtil.java               |   58 ++++++++++++++
 app/src/main/java/com/auto/lyric/service/FloatingWindowService.java |    2 
 app/build.gradle                                                    |   16 ++++
 8 files changed, 236 insertions(+), 3 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 6a19aa5..a45b542 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,18 +15,34 @@
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
 
+    signingConfigs {
+        release {
+            keyAlias 'hefan'
+            keyPassword '34210000'
+            storeFile file('../../hefan.jks')
+            storePassword '34210000'
+        }
+        debug {
+            keyAlias 'hefan'
+            keyPassword '34210000'
+            storeFile file('../../hefan.jks')
+            storePassword '34210000'
+        }
+    }
     buildTypes {
         debug {
             minifyEnabled false
             buildConfigField 'String','HOST_IP_ADDR','"https://test1.mydetao.cn/"'
             resValue "string", "app_name", "歌词工具测试"
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            signingConfig signingConfigs.debug
         }
         release {
             minifyEnabled false
             buildConfigField 'String','HOST_IP_ADDR','"https://test1.mydetao.cn/"'
             resValue "string", "app_name", "歌词工具"
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            signingConfig signingConfigs.release
         }
     }
     compileOptions {
diff --git a/app/src/main/java/com/auto/lyric/MainActivity.java b/app/src/main/java/com/auto/lyric/MainActivity.java
index 90e69f3..182d0b5 100644
--- a/app/src/main/java/com/auto/lyric/MainActivity.java
+++ b/app/src/main/java/com/auto/lyric/MainActivity.java
@@ -31,9 +31,11 @@
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.regex.Pattern;
 
 public class MainActivity extends BaseActivity<ActivityMainBinding, MainViewModel> {
+    SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
     UserInfo userInfo;
     @Override
@@ -63,11 +65,19 @@
             }
         });
         Intent floatService  = new Intent(getApplicationContext(), FloatingWindowService.class);
+        String deviceInfoStr = getStringProjectPrefrence("deviceInfo");
+        if(TextUtils.isEmpty(deviceInfoStr)){
+            viewModel.registerDevice();
+        }
+        long date = getLongProjectPrefrence("launchDate");
+        if(date == 0 || !dateFormat.format(new Date()).equals(dateFormat.format(new Date(date))) ){
+            viewModel.launchApp();
+        }
         String key = getStringProjectPrefrence("activeKey");
         /*userInfo = new Gson().fromJson(key,UserInfo.class);
         try {
             if(TextUtils.isEmpty(key) || TextUtils.isEmpty(userInfo.keyDateValid)||
-                    new Date().getTime() > dateFormat.parse(userInfo.keyDateValid).getTime()){
+                    new Date().getTime() > dateTimeFormat.parse(userInfo.keyDateValid).getTime()){
                 activeDialog();
             }else{
 
diff --git a/app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java b/app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java
index a511ae5..d0c186f 100644
--- a/app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java
+++ b/app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java
@@ -18,6 +18,8 @@
 
 import io.reactivex.Observable;
 import io.reactivex.schedulers.Schedulers;
+import okhttp3.FormBody;
+import okhttp3.MediaType;
 import okhttp3.RequestBody;
 
 /**
@@ -31,6 +33,10 @@
         this.activity = activity;
     }
 
+    protected RequestBody createJsonBody(Object obj){
+        return FormBody.create(MediaType.parse("application/json; charset=utf-8"),obj instanceof String?obj.toString(): new Gson().toJson(obj));
+    }
+
     /**
      * 网络请求观察
      * @param observable
diff --git a/app/src/main/java/com/auto/lyric/data/DeviceInfo.java b/app/src/main/java/com/auto/lyric/data/DeviceInfo.java
new file mode 100644
index 0000000..dc30a28
--- /dev/null
+++ b/app/src/main/java/com/auto/lyric/data/DeviceInfo.java
@@ -0,0 +1,78 @@
+package com.auto.lyric.data;
+
+import android.content.Context;
+import android.os.Build;
+import android.util.DisplayMetrics;
+import android.util.Log;
+
+import com.auto.lyric.util.DeviceIdUtils;
+import com.auto.lyric.util.DeviceUtil;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * @purpose   设备信息
+ * @author Runt (qingingrunt2010@qq.com)
+ * @date  2022/4/13.
+ */
+public class DeviceInfo {
+
+    //("系统:android, ios")
+    public String os;
+    //("系统版本")
+    public String osVersion;
+    //("设备品牌")
+    public String brand;
+    //("手机型号")
+    public String model;
+
+    //("屏幕宽度")
+    public int screenWidth;
+    //("屏幕高度")
+    public int screenHeight;
+    //("屏幕DPI")
+    public int screenDensityDpi;
+
+    public String deviceId;  // imei or idfa, deviceId 如果有多个,按照字母序调整
+    public String deviceId2; // android 补充
+    public String deviceId3; // android 补充
+
+    public String oaid;
+    public String androidId;
+
+    public static DeviceInfo getInstance(Context context){
+        DeviceInfo info = new DeviceInfo();
+        info.os = DeviceUtil.isHarmonyOS()?"harmony":"android";
+        info.osVersion = DeviceUtil.isHarmonyOS()?DeviceUtil.getProp("hw_sc.build.platform.version", ""): Build.VERSION.RELEASE;
+        info.brand = Build.BRAND;
+        info.model = Build.MODEL;
+        DisplayMetrics screenPixel = DeviceUtil.getScreenPixel(context);
+        info.screenWidth = screenPixel.widthPixels;
+        info.screenHeight = screenPixel.heightPixels;
+        info.screenDensityDpi = screenPixel.densityDpi;
+        JSONObject json = DeviceIdUtils.getDeviceIds(context);
+        Log.e("DataCenter","deviceInfo:"+json);
+        try {
+            if(json.has("1")){
+                info.deviceId = json.getString("1");
+            }
+            if(json.has("2")){
+                info.deviceId2 = json.getString("2");
+            }
+            if(json.has("3")){
+                info.deviceId3 = json.getString("3");
+            }
+            if(json.has("6")){
+                info.androidId = json.getString("6");
+            }
+            if(json.has("7")){
+                info.oaid = json.getString("7");
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return info;
+    }
+
+}
diff --git a/app/src/main/java/com/auto/lyric/retrofit/api/CommonApiCenter.java b/app/src/main/java/com/auto/lyric/retrofit/api/CommonApiCenter.java
index 84bed84..f2bce3a 100644
--- a/app/src/main/java/com/auto/lyric/retrofit/api/CommonApiCenter.java
+++ b/app/src/main/java/com/auto/lyric/retrofit/api/CommonApiCenter.java
@@ -1,13 +1,14 @@
 package com.auto.lyric.retrofit.api;
 
 
-
-import com.auto.lyric.data.ActiveResult;
 import com.auto.lyric.data.ApkUpGradeResult;
+import com.auto.lyric.data.BaseApiResult;
 
 import java.util.Map;
 
 import io.reactivex.Observable;
+import okhttp3.RequestBody;
+import retrofit2.http.Body;
 import retrofit2.http.Field;
 import retrofit2.http.FieldMap;
 import retrofit2.http.FormUrlEncoded;
@@ -63,6 +64,20 @@
     @GET("system/appupgrade/tourist/get/2")
     Observable<ApkUpGradeResult> getAppUpdate();
 
+    /**
+     * 注册设备
+     * @return
+     */
+    @POST
+    Observable<BaseApiResult> registerDevice(@Url String url,@Body RequestBody body);
+
+
+    /**
+     * 设备启动
+     * @return
+     */
+    @POST
+    Observable<BaseApiResult> launchApp(@Url String url,@Body RequestBody body);
 
 
 }
diff --git a/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java b/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java
index 865ebe0..a2fc685 100644
--- a/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java
+++ b/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java
@@ -218,6 +218,7 @@
         try {
             timer.cancel();
         }catch (Exception e){}
+        timer = new Timer();
         timer.schedule(new ServiceTask(),0,10);
         binding.btnStart.setText("停止");
         binding.btnPause.setText("暂停");
@@ -243,6 +244,7 @@
 
     private void stop(){
         pause();
+        progress = LyricServer.getLrc_map().get(0).begintime;
         binding.btnStart.setText("开启");
         binding.btnPause.setEnabled(false);
     }
diff --git a/app/src/main/java/com/auto/lyric/util/DeviceUtil.java b/app/src/main/java/com/auto/lyric/util/DeviceUtil.java
index b6128a3..75d7049 100644
--- a/app/src/main/java/com/auto/lyric/util/DeviceUtil.java
+++ b/app/src/main/java/com/auto/lyric/util/DeviceUtil.java
@@ -363,4 +363,62 @@
         }
         return "";
     }
+
+
+    /**
+     * check the system is harmony os
+     *
+     * @return true if it is harmony os
+     */
+    public static boolean isHarmonyOS() {
+        try {
+            Class clz = Class.forName("com.huawei.system.BuildEx");
+            Method method = clz.getMethod("getOsBrand");
+            return "harmony".equals(method.invoke(clz));
+        } catch (ClassNotFoundException e) {
+            Log.e(TAG, "occured ClassNotFoundException");
+        } catch (NoSuchMethodException e) {
+            Log.e(TAG, "occured NoSuchMethodException");
+        } catch (Exception e) {
+            Log.e(TAG, "occur other problem");
+        }
+        return false;
+    }
+
+    /**
+     * 获取鸿蒙系统版本号
+     */
+    public static String getHarmonyOsVersion() {
+        if (isHarmonyOS()) {
+            try {
+                Class cls = Class.forName("android.os.SystemProperties");
+                Method method = cls.getMethod("get", String.class);
+                return method.invoke(cls, "ro.huawei.build.display.id").toString();
+                //android.os.Build.DISPLAY
+            } catch ( Exception e) {
+            }
+        }
+        return "-1";
+    }
+
+    /**
+     * 获取属性
+     * @param property
+     * @param defaultValue
+     * @return
+     */
+    public static String getProp(String property, String defaultValue) {
+        try {
+            Class spClz = Class.forName("android.os.SystemProperties");
+            Method method = spClz.getDeclaredMethod("get", String.class);
+            String value = (String) method.invoke(spClz, property);
+            if (TextUtils.isEmpty(value)) {
+                return defaultValue;
+            }
+            return value;
+        } catch (Throwable e) {
+            e.printStackTrace();
+        }
+        return defaultValue;
+    }
 }
diff --git a/app/src/main/java/com/auto/lyric/vm/MainViewModel.java b/app/src/main/java/com/auto/lyric/vm/MainViewModel.java
index d646f38..4a024fd 100644
--- a/app/src/main/java/com/auto/lyric/vm/MainViewModel.java
+++ b/app/src/main/java/com/auto/lyric/vm/MainViewModel.java
@@ -2,11 +2,17 @@
 
 import com.auto.lyric.base.model.BaseViewModel;
 import com.auto.lyric.data.ActiveResult;
+import com.auto.lyric.data.BaseApiResult;
+import com.auto.lyric.data.DeviceInfo;
 import com.auto.lyric.retrofit.api.CollectApiCenter;
+import com.auto.lyric.retrofit.api.CommonApiCenter;
+import com.auto.lyric.retrofit.observable.HttpObserver;
 import com.auto.lyric.retrofit.observable.LoadingHttpObserver;
 import com.auto.lyric.retrofit.utils.RetrofitUtils;
+import com.google.gson.Gson;
 
 import java.io.File;
+import java.util.Date;
 
 import io.reactivex.Observable;
 import okhttp3.MediaType;
@@ -19,9 +25,11 @@
 public class MainViewModel extends BaseViewModel {
 
     CollectApiCenter apiCenter;
+    CommonApiCenter commonApi;
 
     public MainViewModel(){
         apiCenter = RetrofitUtils.getInstance().getRetrofit(CollectApiCenter.class);
+        commonApi = RetrofitUtils.getInstance().getRetrofit(CommonApiCenter.class);
     }
 
     public void checkActive(String userId,String activeKey,LoadingHttpObserver<ActiveResult> observer){
@@ -29,6 +37,46 @@
         httpObserverOn(observable,observer);
     }
 
+    public void registerDevice(){
+        httpObserverOn(commonApi.registerDevice("https://api.hefan.space/autolyric/registerDevice",createJsonBody(DeviceInfo.getInstance(activity))), new HttpObserver() {
+            @Override
+            public void onError(BaseApiResult result) {
+
+            }
+
+            @Override
+            public void onComplete(BaseApiResult error) {
+
+            }
+
+            @Override
+            public void onComplete() {
+                super.onComplete();
+                activity.putStringProjectPrefrence("deviceInfo",new Gson().toJson(DeviceInfo.getInstance(activity)));
+            }
+        });
+    }
+
+    public void launchApp(){
+        httpObserverOn(commonApi.launchApp("https://api.hefan.space/autolyric/launchApp",createJsonBody(DeviceInfo.getInstance(activity))), new HttpObserver() {
+            @Override
+            public void onError(BaseApiResult result) {
+
+            }
+
+            @Override
+            public void onComplete(BaseApiResult error) {
+
+            }
+
+            @Override
+            public void onComplete() {
+                super.onComplete();
+                activity.putLongProjectPrefrence("launchApp",new Date().getTime());
+            }
+        });
+    }
+
     public void register(String activeKey,LoadingHttpObserver<ActiveResult> observer){
         Observable<ActiveResult> observable = apiCenter.register(getApiFileds("0",activeKey));
         httpObserverOn(observable,observer);

--
Gitblit v1.9.1