app/build.gradle | ●●●●● patch | view | raw | blame | history | |
app/src/main/java/com/auto/lyric/MainActivity.java | ●●●●● patch | view | raw | blame | history | |
app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java | ●●●●● patch | view | raw | blame | history | |
app/src/main/java/com/auto/lyric/data/DeviceInfo.java | ●●●●● patch | view | raw | blame | history | |
app/src/main/java/com/auto/lyric/retrofit/api/CommonApiCenter.java | ●●●●● patch | view | raw | blame | history | |
app/src/main/java/com/auto/lyric/service/FloatingWindowService.java | ●●●●● patch | view | raw | blame | history | |
app/src/main/java/com/auto/lyric/util/DeviceUtil.java | ●●●●● patch | view | raw | blame | history | |
app/src/main/java/com/auto/lyric/vm/MainViewModel.java | ●●●●● 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);