Runt
2023-02-22 ea6ce17bf3272259295adccbad85583079b5bac0
api调用
7 files modified
1 files added
239 ■■■■■ changed files
app/build.gradle 16 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/auto/lyric/MainActivity.java 12 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java 6 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/auto/lyric/data/DeviceInfo.java 78 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/auto/lyric/retrofit/api/CommonApiCenter.java 19 ●●●● patch | view | raw | blame | history
app/src/main/java/com/auto/lyric/service/FloatingWindowService.java 2 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/auto/lyric/util/DeviceUtil.java 58 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/auto/lyric/vm/MainViewModel.java 48 ●●●●● patch | view | raw | blame | history
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 {
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{
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
app/src/main/java/com/auto/lyric/data/DeviceInfo.java
New file
@@ -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;
    }
}
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);
}
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);
    }
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;
    }
}
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);