Browse Source

🎨 高德定位完善,登录之后成功请求一次后台数据 就模拟一次后端请求

master
LiuSiXiang-007 1 year ago
parent
commit
664fc7ff44
  1. 6
      app/src/main/AndroidManifest.xml
  2. 3
      app/src/main/java/com/kanglai/push/di/component/ServiceComponent.java
  3. 42
      app/src/main/java/com/kanglai/push/ui/activity/LocationActivity.java
  4. 2
      app/src/main/java/com/kanglai/push/ui/fragment/UserFragment.java
  5. 82
      app/src/main/java/com/kanglai/push/ui/vm/LocationViewModel.java
  6. 28
      app/src/main/java/com/kanglai/push/util/AlarmReceiver.java
  7. 12
      app/src/main/res/layout/activity_location.xml
  8. 6
      app/src/main/res/values/styles_app.xml

6
app/src/main/AndroidManifest.xml

@ -209,6 +209,12 @@ @@ -209,6 +209,12 @@
android:name=".ui.activity.DocumentActivity"
android:launchMode="standard"
android:screenOrientation="portrait" />
<!-- 根据广播状态更新用户定位内容 -->
<activity
android:name=".ui.activity.LocationActivity"
android:theme="@style/AppTheme.NoDisplay"
android:launchMode="standard"
android:screenOrientation="portrait" />
</application>
</manifest>

3
app/src/main/java/com/kanglai/push/di/component/ServiceComponent.java

@ -13,6 +13,7 @@ import com.kanglai.push.ui.vm.InstantDetailViewModel; @@ -13,6 +13,7 @@ import com.kanglai.push.ui.vm.InstantDetailViewModel;
import com.kanglai.push.ui.vm.InstantViewModel;
import com.kanglai.push.ui.vm.LinkDetailViewModel;
import com.kanglai.push.ui.vm.LinkViewModel;
import com.kanglai.push.ui.vm.LocationViewModel;
import com.kanglai.push.ui.vm.LoginSurveyViewModel;
import com.kanglai.push.ui.vm.LoginViewModel;
import com.kanglai.push.ui.vm.MessageViewModel;
@ -64,4 +65,6 @@ public interface ServiceComponent { @@ -64,4 +65,6 @@ public interface ServiceComponent {
void inject(FocusDetailViewModel viewModel);
void inject(LoginSurveyViewModel viewModel);
void inject(LocationViewModel viewModel);
}

42
app/src/main/java/com/kanglai/push/ui/activity/LocationActivity.java

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
package com.kanglai.push.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import com.blankj.utilcode.util.LogUtils;
import com.kanglai.push.R;
import androidx.databinding.library.baseAdapters.BR;
import com.dolphin.core.base.BaseActivity;
import com.kanglai.push.databinding.ActivityLocationBinding;
import com.kanglai.push.ui.vm.LocationViewModel;
/**
* 根据广播状态更新用户定位内容
*
* @Author: liusixiang007
* @since: 2024/4/2
*/
public class LocationActivity extends BaseActivity<ActivityLocationBinding, LocationViewModel> {
@Override
public int setContentView(Bundle savedInstanceState) {
return R.layout.activity_location;
}
@Override
public int setVariableId() {
return BR.viewModel;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent mIntent = getIntent();
LogUtils.d("--LocationActivity 获取的------纬度"+mIntent.getStringExtra("latitude") + "-------------经度" + mIntent.getStringExtra("longitude"));
// todo 获取到经纬度之后进行 直接上传 上传之后 销毁界面
if (mIntent != null) mViewModel.loadLocation(mIntent.getStringExtra("latitude"), mIntent.getStringExtra("longitude"));
}
}

2
app/src/main/java/com/kanglai/push/ui/fragment/UserFragment.java

@ -129,8 +129,6 @@ public class UserFragment extends BaseFragment<FragmentUserBinding, UserViewMode @@ -129,8 +129,6 @@ public class UserFragment extends BaseFragment<FragmentUserBinding, UserViewMode
.show();
break;
case "3": // todo:测试按钮 上线记得清除
// stopService(LocationService.class); 暂停定位服务
// CacheDiskUtils.getInstance().remove(CacheConstant.USER_INFO); 清除用户数据
// 检测服务是否在线
ActivityManager manager = (ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)){

82
app/src/main/java/com/kanglai/push/ui/vm/LocationViewModel.java

@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
package com.kanglai.push.ui.vm;
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.Utils;
import com.dolphin.core.http.api.ResultResponse;
import com.dolphin.core.http.exception.ExceptionHandle;
import com.dolphin.core.util.RxUtil;
import com.kanglai.push.app.AppApplication;
import com.kanglai.push.di.component.DaggerServiceComponent;
import com.kanglai.push.entity.User;
import com.kanglai.push.service.PushService;
import com.kanglai.push.ui.activity.LocationActivity;
import com.kanglai.push.util.TimeFormatUtil;
import javax.inject.Inject;
import io.reactivex.observers.DisposableObserver;
/**
* 根据广播状态更新用户定位内容
*
* @Author: liusixiang007
* @since: 2024/4/2
*/
public class LocationViewModel extends ToolbarViewModel<LocationActivity> {
@Inject
PushService pushService;
@Override
public void onCreate(@NonNull LifecycleOwner owner) {
super.onCreate(owner);
}
public LocationViewModel(@NonNull Application application) {
super(application);
// 注入服务组件
DaggerServiceComponent
.builder()
.appComponent(((AppApplication) Utils.getApp().getApplicationContext()).appComponent)
.build().inject(this);
}
/**
* 上传经纬度信息
* @param latitude 纬度
* @param longitude 经度
*/
public void loadLocation(String latitude, String longitude) {
// todo 暂时没有正式的上传定位信息接口 以获取用户信息接口模拟
pushService.getUserInfo()
.compose(RxUtil.schedulersTransformer())
.compose(RxUtil.exceptionTransformer())
.doOnSubscribe(this)
.subscribe(new DisposableObserver<ResultResponse<User>>() {
@Override
public void onNext(ResultResponse<User> R) {
if (R.getCode() == R.SUCCESS){
LogUtils.d(TimeFormatUtil.getCurrentTime() + "定位请求上传成功-" + latitude + "/" + longitude);
}else LogUtils.d("定位成功 请求却未成功");
}
@Override
public void onError(Throwable e) {
ExceptionHandle.baseExceptionMsg(e);
// mActivity.finish();
}
@Override
public void onComplete() {
// todo 无论成功与否 全部停止当前活动
// mActivity.finish();
}
});
}
}

28
app/src/main/java/com/kanglai/push/util/AlarmReceiver.java

@ -14,6 +14,7 @@ import com.amap.api.location.AMapLocationClient; @@ -14,6 +14,7 @@ import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.blankj.utilcode.util.LogUtils;
import com.kanglai.push.ui.activity.LocationActivity;
/**
* 报警广播
@ -35,6 +36,8 @@ public class AlarmReceiver extends BroadcastReceiver implements AMapLocationList @@ -35,6 +36,8 @@ public class AlarmReceiver extends BroadcastReceiver implements AMapLocationList
/** 每次定位间隔时间 */
private int TIME_INTERVAL = 30 * 1000;
private Context mContext;
@Override
public void onReceive(Context context, Intent intent) {
@ -42,7 +45,6 @@ public class AlarmReceiver extends BroadcastReceiver implements AMapLocationList @@ -42,7 +45,6 @@ public class AlarmReceiver extends BroadcastReceiver implements AMapLocationList
if (HistoryMsgUtil.noneId()) context.startService(new Intent(context, LocationService.class));
return;
}
mAlarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE); // 获取系统级别的 AlarmManager 服务实例
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
alarmIntent.setAction("youxing_warn");
@ -54,11 +56,10 @@ public class AlarmReceiver extends BroadcastReceiver implements AMapLocationList @@ -54,11 +56,10 @@ public class AlarmReceiver extends BroadcastReceiver implements AMapLocationList
mAlarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + TIME_INTERVAL, pendingIntent);
// Android 大于等于4 - setExact 设置精确的闹钟,即在指定的时间精确唤醒设备执行任务
// mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + TIME_INTERVAL, pendingIntent);
mContext = context;
LogUtils.i("--------------------------------AlarmReceiver---------------------------------------");
/** 上传之前需要判断一次用户登录状态 即 id 时候存在 */
/** 上传之前需要判断一次用户登录状态 */
locationConfigure(!HistoryMsgUtil.noneId(),context);
// locationConfigure(true,context);
}
/** 获取定位数据 */
@ -96,18 +97,15 @@ public class AlarmReceiver extends BroadcastReceiver implements AMapLocationList @@ -96,18 +97,15 @@ public class AlarmReceiver extends BroadcastReceiver implements AMapLocationList
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
// LogUtils.d(
// "设备定位成功,设备所在位置:"+
// aMapLocation.getCountry() // 国家信息
// + aMapLocation.getProvince() // 省份信息
// + aMapLocation.getCity() // 城市信息
// + aMapLocation.getDistrict() // 区信息
// + aMapLocation.getStreet() // 街道信息
// + aMapLocation.getStreetNum() // 门牌号信息
// + "当前时间"
// + TimeFormatUtil.getCurrentTime()
// );
LogUtils.d("------纬度:" + aMapLocation.getLatitude() + "-----经度" + aMapLocation.getLongitude() + "-----" + TimeFormatUtil.getCurrentTime());
// 获取到定位数据直接唤醒 activity 传输参数 todo 后续有请求之后 再打开新界面 或者做长连接
// Intent intent = new Intent(mContext, LocationActivity.class);
// intent.putExtra("latitude",String.valueOf(aMapLocation.getLatitude())); // 经度
// intent.putExtra("longitude",String.valueOf(aMapLocation.getLongitude())); // 纬度
// intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); // 禁用转场动画
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// mContext.startActivity(intent);
}else LogUtils.e("设备定位失败 - 错误信息>>>>>>>>>>>>>" + aMapLocation.getErrorCode() + ",错误信息: " + aMapLocation.getErrorInfo());
}
}

12
app/src/main/res/layout/activity_location.xml

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:binding="http://schemas.android.com/apk/res-auto">
<data>
<variable name="viewModel" type="com.kanglai.push.ui.vm.LocationViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
</layout>

6
app/src/main/res/values/styles_app.xml

@ -29,6 +29,12 @@ @@ -29,6 +29,12 @@
<item name="styleLoadingLayout">@style/LoadingLayoutStyle</item>
</style>
<!-- 透明主题样式 -->
<style name="AppTheme.NoDisplay" parent="Theme.AppCompat">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
<!-- 友盟飞溅引导页 -->
<style name="theme_umeng_push_splash" parent="android:Theme.NoTitleBar.Fullscreen">
<item name="android:windowBackground">@drawable/icon_umeng_push_default_splash_bg</item>

Loading…
Cancel
Save