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