Browse Source

🚩 新增高德定位 通过后台服务实时返回定位数据 | 工作台新bannar

master
LiuSiXiang-007 1 year ago
parent
commit
392485e875
  1. 1
      app/build.gradle
  2. BIN
      app/libs/AMap_Location_V6.4.2_20231215.jar
  3. 27
      app/src/main/AndroidManifest.xml
  4. 6
      app/src/main/java/com/kanglai/push/app/AppApplication.java
  5. 118
      app/src/main/java/com/kanglai/push/service/LocationService.java
  6. 4
      app/src/main/java/com/kanglai/push/ui/activity/DocumentActivity.java
  7. 7
      app/src/main/java/com/kanglai/push/ui/activity/LoginActivity.java
  8. 1
      app/src/main/java/com/kanglai/push/ui/activity/TabBarActivity.java
  9. 9
      app/src/main/java/com/kanglai/push/ui/fragment/MessageFragment.java
  10. 12
      app/src/main/java/com/kanglai/push/ui/fragment/UserFragment.java
  11. 11
      app/src/main/java/com/kanglai/push/ui/fragment/WorkbenchFragment.java
  12. 1
      app/src/main/java/com/kanglai/push/ui/vm/InstantViewModel.java
  13. 1
      app/src/main/java/com/kanglai/push/ui/vm/LoginViewModel.java
  14. 4
      app/src/main/java/com/kanglai/push/ui/vm/UserViewModel.java
  15. BIN
      app/src/main/res/drawable-xxhdpi/bannar_customer_phone.jpg
  16. BIN
      app/src/main/res/drawable-xxhdpi/bannar_more_service.jpg
  17. 0
      app/src/main/res/drawable-xxhdpi/bannar_quest_lobby.png
  18. 2
      app/src/main/res/layout/activity_instant.xml
  19. 2
      app/src/main/res/layout/fragment_workbench.xml
  20. 3
      app/src/main/res/values/strings.xml
  21. 2
      common.gradle

1
app/build.gradle

@ -101,6 +101,7 @@ android {
dependencies { dependencies {
// //
implementation project(':library:umeng') implementation project(':library:umeng')
implementation files('libs/AMap_Location_V6.4.2_20231215.jar') // sdk
implementation DEPENDENCIES['pager-bottom-tab-strip'] implementation DEPENDENCIES['pager-bottom-tab-strip']
implementation DEPENDENCIES['pictureselector'] implementation DEPENDENCIES['pictureselector']
implementation DEPENDENCIES['pictureselector-compress'] implementation DEPENDENCIES['pictureselector-compress']

BIN
app/libs/AMap_Location_V6.4.2_20231215.jar

Binary file not shown.

27
app/src/main/AndroidManifest.xml

@ -7,10 +7,11 @@
<uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 外部存储 --> <!-- 外部存储 允许读设备等信息 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" /> <!-- 用于写入缓存数据到扩展存储卡 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />
<!-- 拍照权限 --> <!-- 拍照权限 -->
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
@ -28,6 +29,19 @@
<!-- 允许应用打开网络套接字 --> <!-- 允许应用打开网络套接字 -->
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于申请调用A-GPS模块 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!-- 允许应用在后台运行时启动前台服务 如果需要启动后台定位则必须声明这个权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 --> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
@ -50,6 +64,13 @@
tools:replace="android:label" tools:replace="android:label"
tools:targetApi="q"> tools:targetApi="q">
<!-- 高德开放平台key -->
<meta-data android:name="com.amap.api.v2.apikey" android:value="78daab955d5a7b7b1c26c7e074cfd17f" />
<!-- 高德地图后台定位服务 -->
<service android:name="com.amap.api.location.APSService"></service>
<!-- 后台监听定位数据 -->
<service android:name=".service.LocationService" android:foregroundServiceType="location" android:exported="true"></service>
<!-- 闪屏引导 --> <!-- 闪屏引导 -->
<activity <activity
android:name=".ui.activity.SplashActivity" android:name=".ui.activity.SplashActivity"

6
app/src/main/java/com/kanglai/push/app/AppApplication.java

@ -4,6 +4,7 @@ import android.content.Context;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.amap.api.location.AMapLocationClient;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.dolphin.core.BuildConfig; import com.dolphin.core.BuildConfig;
import com.dolphin.core.base.BaseApplication; import com.dolphin.core.base.BaseApplication;
@ -44,6 +45,8 @@ public class AppApplication extends BaseApplication {
public static Context mContext; public static Context mContext;
public AMapLocationClient mapLocationClient;
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
@ -118,6 +121,9 @@ public class AppApplication extends BaseApplication {
DialogX.enterAnimDuration = 100; DialogX.enterAnimDuration = 100;
DialogX.exitAnimDuration = 100; // 动画完成时间 DialogX.exitAnimDuration = 100; // 动画完成时间
mapLocationClient.updatePrivacyShow(mContext, true, true); // 隐私弹窗状态 高德定位要求
mapLocationClient.updatePrivacyAgree(mContext, true); // 用户授权高德SDK隐私协议状态
} }
@Override @Override

118
app/src/main/java/com/kanglai/push/service/LocationService.java

@ -0,0 +1,118 @@
package com.kanglai.push.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import androidx.annotation.Nullable;
import com.amap.api.location.AMapLocation;
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.util.TimeFormatUtil;
/**
* 高德长时间定位
* @Author: liusixiang007
* @since: 2024/2/28
*/
public class LocationService extends Service implements AMapLocationListener {
private AMapLocationClient aMapLocationClient = null;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
/**
* 返回位置信息
* @param aMapLocation 返回具体的位置信息对象
*/
@Override
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());
}else LogUtils.e("设备定位失败 - 错误信息>>>>>>>>>>>>>" + aMapLocation.getErrorCode() + ",错误信息: " + aMapLocation.getErrorInfo());
}
}
/**
* 通过startService()的方式启动Service的时候被调用的生命周期
* @param intent startService时传入的inten
* @param flags lags有三个可以传入的值0START_FLAG_REDELIVERY和START_FLAG_RETRY
* @param startId 唯一的启动请求
* @return
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// todo 开始定位
locationConfigure(true);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
locationConfigure(false);
super.onDestroy();
}
/**
* 配置定位服务参数
* @param start 定位状态
*/
private void locationConfigure(boolean start) {
if (start) { // 开始定位
try {
aMapLocationClient = new AMapLocationClient(getApplicationContext());
} catch (Exception e) {
throw new RuntimeException(e);
}
/** 这里要实现AMapLocationListener接口,AMapLocationListener接口只有onLocationChanged方法可以实现,用于接收异步返回的定位结果,参数是AMapLocation类型。 */
aMapLocationClient.setLocationListener(this); // 设置定位回调监听
AMapLocationClientOption aMapLocationClientOption = new AMapLocationClientOption();
/** Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 */
// aMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
// aMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);
aMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors);
aMapLocationClientOption.setNeedAddress(true); // 是否返回位置信息
aMapLocationClientOption.setOnceLocation(false); // 是否只定位一次(默认为false)
aMapLocationClientOption.setWifiScan(true); // 允许调用WIFI刷新-默认true
// aMapLocationClientOption.setMockEnable(false); // 是否允许虚拟定位
aMapLocationClientOption.setHttpTimeOut(1000 * 20); // http超时时间 20s
aMapLocationClientOption.setInterval(1000 * 5); // 返回定位间隔时间 3s返回一次
aMapLocationClientOption.setLocationCacheEnable(false); // 缓存机制
aMapLocationClient.setLocationOption(aMapLocationClientOption);
aMapLocationClient.startLocation(); // 开始定位
}else { // 结束定位 关闭定位服务
if (aMapLocationClient != null) aMapLocationClient.onDestroy();
LogUtils.d("aMapLocation ----------- 定位服务已关闭");
}
}
}

4
app/src/main/java/com/kanglai/push/ui/activity/DocumentActivity.java

@ -42,8 +42,8 @@ public class DocumentActivity extends BaseActivity<ActivityDocumentBinding, Docu
String type = getIntent().getStringExtra("DOCUMENT_TYPE"); String type = getIntent().getStringExtra("DOCUMENT_TYPE");
if (!StringUtils.isTrimEmpty(type)){ if (!StringUtils.isTrimEmpty(type)){
mViewModel.judgeTit(type); mViewModel.judgeTit(type);
if ("0".equals(type)) mWebView.loadUrl("https://www.kanglailab.com/about.html"); // 用户协议 if ("0".equals(type)) mWebView.loadUrl("https://h5.kanglailab.com/app/userAgreement"); // 用户协议
else mWebView.loadUrl("https://wx.mail.qq.com/list/readtemplate?name=app_intro.html#/agreement/appPolicy"); // 隐私政策 else mWebView.loadUrl("https://h5.kanglailab.com/app/privacyPolicy"); // 隐私政策
mWebView.requestFocus(); // 获取焦点 mWebView.requestFocus(); // 获取焦点
mWebView.getSettings().setJavaScriptEnabled(true); // 加载js清单 mWebView.getSettings().setJavaScriptEnabled(true); // 加载js清单

7
app/src/main/java/com/kanglai/push/ui/activity/LoginActivity.java

@ -5,16 +5,13 @@ import android.app.AlertDialog;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.Process;
import android.text.InputFilter; import android.text.InputFilter;
import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.TextView; import android.widget.TextView;
import androidx.core.app.NotificationManagerCompat; import androidx.core.app.NotificationManagerCompat;
import com.blankj.utilcode.util.PermissionUtils;
import com.blankj.utilcode.util.StringUtils; import com.blankj.utilcode.util.StringUtils;
import com.dolphin.core.base.AppManager; import com.dolphin.core.base.AppManager;
import com.dolphin.core.base.BaseActivity; import com.dolphin.core.base.BaseActivity;
@ -25,8 +22,6 @@ import com.kanglai.push.R;
import com.kanglai.push.databinding.ActivityLoginBinding; import com.kanglai.push.databinding.ActivityLoginBinding;
import com.kanglai.push.ui.vm.LoginViewModel; import com.kanglai.push.ui.vm.LoginViewModel;
import com.kanglai.push.util.ViewFilterUtil; import com.kanglai.push.util.ViewFilterUtil;
import com.kongzue.dialogx.dialogs.MessageDialog;
import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
import com.tencent.mmkv.MMKV; import com.tencent.mmkv.MMKV;
import com.umeng.socialize.UMShareAPI; import com.umeng.socialize.UMShareAPI;
@ -58,6 +53,8 @@ public class LoginActivity extends BaseActivity<ActivityLoginBinding, LoginViewM
private final String[] needPermissions = { private final String[] needPermissions = {
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION,
Manifest.permission.READ_PHONE_STATE Manifest.permission.READ_PHONE_STATE
}; };

1
app/src/main/java/com/kanglai/push/ui/activity/TabBarActivity.java

@ -54,7 +54,6 @@ public class TabBarActivity extends BaseActivity<ActivityTabBarBinding, BaseView
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
pageNavigationView = findViewById(R.id.pager_bottom_tab); pageNavigationView = findViewById(R.id.pager_bottom_tab);
initFragment(); initFragment();
} }
private void initFragment() { private void initFragment() {

9
app/src/main/java/com/kanglai/push/ui/fragment/MessageFragment.java

@ -3,8 +3,6 @@ package com.kanglai.push.ui.fragment;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
@ -21,7 +19,6 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.blankj.utilcode.util.CacheDiskUtils; import com.blankj.utilcode.util.CacheDiskUtils;
import com.blankj.utilcode.util.ClickUtils;
import com.blankj.utilcode.util.CollectionUtils; import com.blankj.utilcode.util.CollectionUtils;
import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.StringUtils; import com.blankj.utilcode.util.StringUtils;
@ -35,7 +32,6 @@ import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator;
import com.h6ah4i.android.widget.advrecyclerview.animator.SwipeDismissItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.animator.SwipeDismissItemAnimator;
import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager; import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager;
import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager; import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager;
import com.jakewharton.rxbinding4.view.RxView;
import com.kanglai.push.BR; import com.kanglai.push.BR;
import com.kanglai.push.R; import com.kanglai.push.R;
import com.kanglai.push.constant.CacheConstant; import com.kanglai.push.constant.CacheConstant;
@ -43,6 +39,7 @@ import com.kanglai.push.constant.CommonConstant;
import com.kanglai.push.databinding.FragmentMessageBinding; import com.kanglai.push.databinding.FragmentMessageBinding;
import com.kanglai.push.entity.LocalPushChatMsg; import com.kanglai.push.entity.LocalPushChatMsg;
import com.kanglai.push.entity.User; import com.kanglai.push.entity.User;
import com.kanglai.push.service.LocationService;
import com.kanglai.push.ui.activity.InstantActivity; import com.kanglai.push.ui.activity.InstantActivity;
import com.kanglai.push.ui.adapter.MessageSwipeableRecyclerAdapter; import com.kanglai.push.ui.adapter.MessageSwipeableRecyclerAdapter;
import com.kanglai.push.ui.vm.MessageViewModel; import com.kanglai.push.ui.vm.MessageViewModel;
@ -50,8 +47,6 @@ import com.kanglai.push.util.HistoryMsgUtil;
import com.scwang.smart.refresh.layout.api.RefreshLayout; import com.scwang.smart.refresh.layout.api.RefreshLayout;
import com.umeng.message.PushAgent; import com.umeng.message.PushAgent;
import java.util.concurrent.TimeUnit;
import ezy.ui.layout.LoadingLayout; import ezy.ui.layout.LoadingLayout;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
@ -123,6 +118,8 @@ public class MessageFragment extends BaseFragment<FragmentMessageBinding, Messag
mViewModel.addLocalHistoryMsg(result.getId(), result.getLastContent()); mViewModel.addLocalHistoryMsg(result.getId(), result.getLastContent());
} }
}); });
getActivity().startService(new Intent(getActivity(),LocationService.class));
} }
@Override @Override

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

@ -1,5 +1,8 @@
package com.kanglai.push.ui.fragment; package com.kanglai.push.ui.fragment;
import static com.blankj.utilcode.util.ServiceUtils.stopService;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Patterns; import android.util.Patterns;
@ -24,6 +27,7 @@ import com.kanglai.push.R;
import com.kanglai.push.constant.CacheConstant; import com.kanglai.push.constant.CacheConstant;
import com.kanglai.push.databinding.FragmentUserBinding; import com.kanglai.push.databinding.FragmentUserBinding;
import com.kanglai.push.entity.User; import com.kanglai.push.entity.User;
import com.kanglai.push.service.LocationService;
import com.kanglai.push.ui.activity.AboutActivity; import com.kanglai.push.ui.activity.AboutActivity;
import com.kanglai.push.ui.activity.LoginSurveyActivity; import com.kanglai.push.ui.activity.LoginSurveyActivity;
import com.kanglai.push.ui.activity.PushTypeActivity; import com.kanglai.push.ui.activity.PushTypeActivity;
@ -77,6 +81,7 @@ public class UserFragment extends BaseFragment<FragmentUserBinding, UserViewMode
mRecyclerView = getView().findViewById(R.id.recycler_view); mRecyclerView = getView().findViewById(R.id.recycler_view);
// 设置列表 // 设置列表
List<UserRecyclerAdapter.UserEntity> list = CollectionUtils.newArrayList( List<UserRecyclerAdapter.UserEntity> list = CollectionUtils.newArrayList(
new UserRecyclerAdapter.UserEntity().setCode("1").setTitle("Bate-测试退出定位服务").setBadge(0).setImage(R.drawable.icon_about).setHidesLeftImage(true),
new UserRecyclerAdapter.UserEntity().setCode("2").setTitle("关于我们").setBadge(0).setImage(R.drawable.icon_about).setHidesLeftImage(true), new UserRecyclerAdapter.UserEntity().setCode("2").setTitle("关于我们").setBadge(0).setImage(R.drawable.icon_about).setHidesLeftImage(true),
new UserRecyclerAdapter.UserEntity().setCode("3").setTitle("退出登录").setBadge(0).setImage(R.drawable.icon_exit).setHidesLeftImage(true) new UserRecyclerAdapter.UserEntity().setCode("3").setTitle("退出登录").setBadge(0).setImage(R.drawable.icon_exit).setHidesLeftImage(true)
); );
@ -103,13 +108,13 @@ public class UserFragment extends BaseFragment<FragmentUserBinding, UserViewMode
public void onItemViewClicked(UserRecyclerAdapter.UserEntity userEntity) { public void onItemViewClicked(UserRecyclerAdapter.UserEntity userEntity) {
/** 列表点击事件 */ /** 列表点击事件 */
switch (userEntity.code) { switch (userEntity.code) {
case "1": // 推送设置 case "1": // todo: 暂未定义内容 后续可用来测试
startActivity(PushTypeActivity.class);
break; break;
case "2": // 关于我们 case "2": // 关于我们
startActivity(AboutActivity.class); startActivity(AboutActivity.class);
break; break;
case "3": // 推送登录 case "3": // 退出登录
MessageDialog.build() MessageDialog.build()
.setTheme(DialogX.THEME.LIGHT) .setTheme(DialogX.THEME.LIGHT)
.setTitle("您确定要退出登录吗?") .setTitle("您确定要退出登录吗?")
@ -119,6 +124,7 @@ public class UserFragment extends BaseFragment<FragmentUserBinding, UserViewMode
public boolean onClick(MessageDialog dialog, View v) { public boolean onClick(MessageDialog dialog, View v) {
mViewModel.loginOut(); mViewModel.loginOut();
dialog.dismiss(); dialog.dismiss();
stopService(LocationService.class); // 停止定位服务
return false; return false;
} }
}) })

11
app/src/main/java/com/kanglai/push/ui/fragment/WorkbenchFragment.java

@ -82,12 +82,11 @@ public class WorkbenchFragment extends BaseFragment<FragmentWorkbenchBinding, Wo
}); });
/** 滚动轮播图控件 */ /** 滚动轮播图控件 */
mXBanner = (XBanner) getView().findViewById(R.id.xbanner); mXBanner = (XBanner) getView().findViewById(R.id.xbanner);
List<String> mXBannerList = new ArrayList<>(); List<Integer> mXBannerList = new ArrayList<>();
// 加载网络图片 // 加载网络图片 就把list的类型设置为string
mXBannerList.add("https://pic3.zhimg.com/v2-a011510812de21b7247e580cdca05cc6_r.jpg"); // mXBannerList.add("https://pic1.zhimg.com/v2-886e2dba494fff222a393afb11e51e04_r.jpg");
mXBannerList.add("https://pic1.zhimg.com/v2-886e2dba494fff222a393afb11e51e04_r.jpg"); mXBannerList.add(R.drawable.bannar_customer_phone);
mXBannerList.add("https://pic4.zhimg.com/v2-fdf0934bfdf41d6cecb7be2db478530f_r.jpg"); mXBannerList.add(R.drawable.bannar_more_service);
mXBannerList.add("https://pic1.zhimg.com/v2-45eaefe3e324f8b8494cbec13b6589f0_r.jpg");
mXBanner.setData(mXBannerList, null); mXBanner.setData(mXBannerList, null);
mXBanner.loadImage(new XBanner.XBannerAdapter() { // 加载广告图片 mXBanner.loadImage(new XBanner.XBannerAdapter() { // 加载广告图片
@Override @Override

1
app/src/main/java/com/kanglai/push/ui/vm/InstantViewModel.java

@ -89,6 +89,7 @@ public class InstantViewModel extends ToolbarViewModel<InstantActivity>{
ToastUtil.showBottom("制定任务"); ToastUtil.showBottom("制定任务");
}); });
public BindingCommand regularTimeCommand = new BindingCommand(() -> { public BindingCommand regularTimeCommand = new BindingCommand(() -> {
// todo 定时消息
ToastUtil.showBottom("定时任务"); ToastUtil.showBottom("定时任务");
}); });

1
app/src/main/java/com/kanglai/push/ui/vm/LoginViewModel.java

@ -215,7 +215,6 @@ public class LoginViewModel extends BaseViewModel<LoginActivity> {
Pair.create("identityProvider", "app"), // 用户类型 Pair.create("identityProvider", "app"), // 用户类型
Pair.create("tenantId", CommonConstant.MULTI_TENANT_ID), // 租户类型 Pair.create("tenantId", CommonConstant.MULTI_TENANT_ID), // 租户类型
Pair.create("phone", phones.get()), Pair.create("phone", phones.get()),
Pair.create("captcha", captcha.get()))) Pair.create("captcha", captcha.get())))
.compose(RxUtil.schedulersTransformer()) .compose(RxUtil.schedulersTransformer())
.compose(RxUtil.exceptionTransformer()) .compose(RxUtil.exceptionTransformer())

4
app/src/main/java/com/kanglai/push/ui/vm/UserViewModel.java

@ -7,20 +7,16 @@ import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import com.blankj.utilcode.util.CacheDiskUtils; import com.blankj.utilcode.util.CacheDiskUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.StringUtils;
import com.blankj.utilcode.util.Utils; import com.blankj.utilcode.util.Utils;
import com.dolphin.core.http.api.ResultResponse; import com.dolphin.core.http.api.ResultResponse;
import com.dolphin.core.util.PermissionUtil; import com.dolphin.core.util.PermissionUtil;
import com.dolphin.core.util.RxUtil; import com.dolphin.core.util.RxUtil;
import com.kanglai.push.app.AppApplication; import com.kanglai.push.app.AppApplication;
import com.kanglai.push.constant.CacheConstant; import com.kanglai.push.constant.CacheConstant;
import com.kanglai.push.constant.CommonConstant;
import com.kanglai.push.di.component.DaggerServiceComponent; import com.kanglai.push.di.component.DaggerServiceComponent;
import com.kanglai.push.entity.User; import com.kanglai.push.entity.User;
import com.kanglai.push.service.LoginService; import com.kanglai.push.service.LoginService;
import com.kanglai.push.ui.fragment.UserFragment; import com.kanglai.push.ui.fragment.UserFragment;
import com.umeng.message.PushAgent;
import javax.inject.Inject; import javax.inject.Inject;

BIN
app/src/main/res/drawable-xxhdpi/bannar_customer_phone.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 KiB

BIN
app/src/main/res/drawable-xxhdpi/bannar_more_service.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

0
app/src/main/res/drawable-xxhdpi/icon_bannar_workbench.png → app/src/main/res/drawable-xxhdpi/bannar_quest_lobby.png

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 176 KiB

2
app/src/main/res/layout/activity_instant.xml

@ -138,7 +138,7 @@
</LinearLayout> </LinearLayout>
<LinearLayout style="@style/instant_grid_layout" binding:onClickCommand="@{viewModel.regularTimeCommand}"> <LinearLayout style="@style/instant_grid_layout" binding:onClickCommand="@{viewModel.regularTimeCommand}">
<ImageView style="@style/instant_grid_img" android:src="@drawable/icon_regular_time_fill"/> <ImageView style="@style/instant_grid_img" android:src="@drawable/icon_regular_time_fill"/>
<TextView android:text="定时提醒" style="@style/instant_grid_tit"/> <TextView android:text="定时消息" style="@style/instant_grid_tit"/>
</LinearLayout> </LinearLayout>
</GridLayout> </GridLayout>

2
app/src/main/res/layout/fragment_workbench.xml

@ -14,7 +14,7 @@
android:id="@+id/top_bg" android:id="@+id/top_bg"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/dp_160" android:layout_height="@dimen/dp_160"
android:background="@drawable/icon_bannar_workbench"/> android:background="@drawable/bannar_quest_lobby"/>
<!-- xbanna滚动广告 --> <!-- xbanna滚动广告 -->
<LinearLayout <LinearLayout

3
app/src/main/res/values/strings.xml

@ -22,4 +22,7 @@
<string name="instant_header_release">释放立即加载</string> <string name="instant_header_release">释放立即加载</string>
<string name="instant_header_finish">加载完成</string> <string name="instant_header_finish">加载完成</string>
<string name="instant_header_fail">加载失败</string> <string name="instant_header_fail">加载失败</string>
<!-- 在线文档url 用户协议以及隐私政策 -->
<string name="url_user_agreement_document">https://h5.kanglailab.com/app/userAgreement</string>
<string name="url_privacy_policy_document">https://h5.kanglailab.com/app/privacyPolicy</string>
</resources> </resources>

2
common.gradle

@ -26,7 +26,7 @@ android {
// so // so
sourceSets { sourceSets {
main { main {
jniLibs.srcDirs = ['libs'] jniLibs.srcDirs = ['libs'] // jni库的调用会到资源文件夹下libs里面找so文件
} }
test.root 'src/unitTest' test.root 'src/unitTest'
test.java.srcDirs 'src/unitTest/java' test.java.srcDirs 'src/unitTest/java'

Loading…
Cancel
Save