feat: 增加绘制辅助线功能
This commit is contained in:
parent
c5e4a216bc
commit
506299b3a3
@ -17,8 +17,8 @@ android {
|
||||
applicationId "com.navinfo.outdoor"
|
||||
minSdkVersion 24
|
||||
targetSdkVersion 30
|
||||
versionCode 47
|
||||
versionName "8.230223"
|
||||
versionCode 48
|
||||
versionName "8.230309"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
ndk {
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.navinfo.outdoor.activity;
|
||||
|
||||
import com.elvishew.xlog.XLog;
|
||||
import com.github.lazylibrary.util.ShellUtils;
|
||||
import com.google.gson.Gson;
|
||||
import com.kongzue.dialog.interfaces.OnDialogButtonClickListener;
|
||||
@ -34,12 +35,17 @@ import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.hardware.Sensor;
|
||||
import android.hardware.SensorEvent;
|
||||
import android.hardware.SensorEventListener;
|
||||
import android.hardware.SensorManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.navinfo.outdoor.R;
|
||||
@ -109,11 +115,13 @@ public class HomeActivity extends BaseActivity {
|
||||
|
||||
// 注册位置更新的lifeCycle
|
||||
getLifecycle().addObserver(LocationLifeCycle.getInstance());
|
||||
|
||||
} else {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
|
@ -6,6 +6,10 @@ import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.hardware.Sensor;
|
||||
import android.hardware.SensorEvent;
|
||||
import android.hardware.SensorEventListener;
|
||||
import android.hardware.SensorManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.CountDownTimer;
|
||||
@ -19,6 +23,7 @@ import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.lifecycle.ProcessLifecycleOwner;
|
||||
|
||||
import com.elvishew.xlog.LogConfiguration;
|
||||
@ -68,7 +73,6 @@ import java.util.List;
|
||||
* 以及自启动 (获取token 获取用户信息)
|
||||
*/
|
||||
public class MainActivity extends BaseActivity {
|
||||
|
||||
private Handler handler = new Handler(new Handler.Callback() {
|
||||
@Override
|
||||
public boolean handleMessage(@NonNull Message msg) {
|
||||
|
@ -9,17 +9,13 @@ import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Matrix;
|
||||
import android.location.Location;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
@ -28,7 +24,6 @@ import android.widget.ImageView;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.RadioGroup;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@ -43,16 +38,13 @@ import com.navinfo.outdoor.R;
|
||||
import com.navinfo.outdoor.api.Constant;
|
||||
import com.navinfo.outdoor.api.UserApplication;
|
||||
import com.navinfo.outdoor.base.BaseActivity;
|
||||
import com.navinfo.outdoor.room.PoiEntity;
|
||||
import com.navinfo.outdoor.util.AWMp4ParserHelper;
|
||||
import com.navinfo.outdoor.util.BackHandlerHelper;
|
||||
import com.navinfo.outdoor.util.GPSUtils;
|
||||
import com.navinfo.outdoor.util.Geohash;
|
||||
import com.navinfo.outdoor.util.GeometryTools;
|
||||
import com.navinfo.outdoor.util.Gps;
|
||||
import com.navinfo.outdoor.util.LocationLifeCycle;
|
||||
import com.navinfo.outdoor.util.MyLocation;
|
||||
import com.navinfo.outdoor.util.MyTecentLocationSource;
|
||||
import com.navinfo.outdoor.util.SensorOritationLifecycle;
|
||||
import com.navinfo.outdoor.util.SystemTTS;
|
||||
import com.navinfo.outdoor.util.TimestampUtil;
|
||||
import com.navinfo.outdoor.util.ToastUtils;
|
||||
@ -64,10 +56,8 @@ import com.otaliastudios.cameraview.FileCallback;
|
||||
import com.otaliastudios.cameraview.PictureResult;
|
||||
import com.otaliastudios.cameraview.controls.Mode;
|
||||
import com.otaliastudios.cameraview.size.AspectRatio;
|
||||
import com.otaliastudios.cameraview.size.Size;
|
||||
import com.otaliastudios.cameraview.size.SizeSelector;
|
||||
import com.otaliastudios.cameraview.size.SizeSelectors;
|
||||
import com.tencent.map.geolocation.TencentLocation;
|
||||
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
|
||||
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
|
||||
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
|
||||
@ -92,26 +82,19 @@ import org.locationtech.jts.geom.MultiLineString;
|
||||
import com.wanghong.webpnative.WebPNative;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE;
|
||||
import static com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.ObservableEmitter;
|
||||
@ -119,8 +102,6 @@ import io.reactivex.ObservableOnSubscribe;
|
||||
import io.reactivex.Observer;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.functions.Action;
|
||||
import io.reactivex.functions.Consumer;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
/**
|
||||
@ -159,6 +140,8 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen
|
||||
private static int BRIGHTNESS=40, FRAMENESS=30;
|
||||
@SuppressLint("SimpleDateFormat")
|
||||
private SimpleDateFormat formatter;
|
||||
private SensorOritationLifecycle sensorOritationLifecycle;
|
||||
private TextView tvDegrees;
|
||||
private Handler handler = new Handler(new Handler.Callback() {
|
||||
@Override
|
||||
public boolean handleMessage(@NonNull Message msg) {
|
||||
@ -194,6 +177,14 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen
|
||||
// 设置当前界面亮度为40%
|
||||
setWindowBrightness(BRIGHTNESS);
|
||||
LocationLifeCycle.getInstance().startGPSLocation();
|
||||
sensorOritationLifecycle = new SensorOritationLifecycle(this);
|
||||
getLifecycle().addObserver(sensorOritationLifecycle);
|
||||
sensorOritationLifecycle.setDegreesChangeListener(new SensorOritationLifecycle.DegreesChangeListener() {
|
||||
@Override
|
||||
public void onDegreesChangeListener(float xDegree, float yDegree, float zDegree) {
|
||||
tvDegrees.setText("x:"+xDegree+"\ny:"+yDegree+"\nz:"+zDegree);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -206,6 +197,7 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen
|
||||
@Override
|
||||
protected void initView() {
|
||||
super.initView();
|
||||
tvDegrees = findViewById(R.id.tv_degrees);
|
||||
if (getIntent() != null) {
|
||||
finalVideoPath = getIntent().getStringExtra(Constant.INTENT_JPG_PATH);
|
||||
type = getIntent().getIntExtra(Constant.INTENT_TYPE, 0);
|
||||
@ -914,6 +906,9 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen
|
||||
// 退出后切换主定位模式为腾讯定位
|
||||
LocationLifeCycle.getInstance().setMainLocationFrom(LocationLifeCycle.LOCATION_FROM.TENCENT);
|
||||
LocationLifeCycle.getInstance().stopGPSLocation();
|
||||
if (sensorOritationLifecycle!=null) {
|
||||
getLifecycle().removeObserver(sensorOritationLifecycle);
|
||||
}
|
||||
}
|
||||
|
||||
// @Subscribe(threadMode = ThreadMode.MAIN)
|
||||
|
@ -0,0 +1,42 @@
|
||||
package com.navinfo.outdoor.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.View.OnClickListener
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.navinfo.outdoor.base.BaseViewBindingActivity
|
||||
import com.navinfo.outdoor.databinding.ActivityPicturesBinding
|
||||
import com.navinfo.outdoor.util.LocationLifeCycle
|
||||
import com.navinfo.outdoor.util.SensorOritationLifecycle
|
||||
import com.navinfo.outdoor.util.SensorOritationLifecycle.DegreesChangeListener
|
||||
import com.navinfo.outdoor.viewmodel.RxPicturesViewModel
|
||||
|
||||
class RXPicturesActivity: BaseViewBindingActivity(), OnClickListener {
|
||||
private lateinit var binding: ActivityPicturesBinding
|
||||
private lateinit var viewModel: RxPicturesViewModel
|
||||
|
||||
private val sensorOritationLifecycle: SensorOritationLifecycle by lazy { SensorOritationLifecycle(this) }
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = ActivityPicturesBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
binding.camera.snapshotMaxWidth = 1920
|
||||
binding.camera.snapshotMaxHeight = 1440
|
||||
binding.camera.setOnClickListener(this)
|
||||
viewModel = ViewModelProvider(this).get(RxPicturesViewModel::class.java)
|
||||
|
||||
LocationLifeCycle.getInstance().startGPSLocation()
|
||||
lifecycle.addObserver(sensorOritationLifecycle)
|
||||
sensorOritationLifecycle.degreesChangeListener = object : DegreesChangeListener {
|
||||
override fun onDegreesChangeListener(xDegree: Float, yDegree: Float, zDegree: Float) {
|
||||
binding.tvDegrees.text = "x:$xDegree\ny:$yDegree\nz:$zDegree"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun onClick(p0: View?) {
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
package com.navinfo.outdoor.base
|
||||
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.view.KeyEvent
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.github.lazylibrary.util.StringUtils
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
import com.navinfo.outdoor.R
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
|
||||
open class BaseViewBindingActivity: AppCompatActivity() {
|
||||
private var alertDialog: AlertDialog? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
// setScreenRoate(true);
|
||||
//初始化,默认透明状态栏和黑色导航栏
|
||||
ImmersionBar.with(this).init()
|
||||
Collector.addActivity(this)
|
||||
if (!EventBus.getDefault().isRegistered(this)) {
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
}
|
||||
|
||||
fun showLoadingDialog() {
|
||||
showLoadingDialog(null)
|
||||
}
|
||||
|
||||
fun showLoadingDialog(msg: String?) {
|
||||
alertDialog?.dismiss()
|
||||
alertDialog = AlertDialog.Builder(this).create()
|
||||
alertDialog!!.window?.setBackgroundDrawable(ColorDrawable())
|
||||
alertDialog!!.setCancelable(false)
|
||||
alertDialog!!.setOnKeyListener(DialogInterface.OnKeyListener { dialog: DialogInterface?, keyCode: Int, event: KeyEvent? -> keyCode == KeyEvent.KEYCODE_SEARCH || keyCode == KeyEvent.KEYCODE_BACK })
|
||||
//loading样式
|
||||
val view: View = LayoutInflater.from(this).inflate(R.layout.loading, null)
|
||||
val tv = view.findViewById<TextView>(R.id.progressBar_tx)
|
||||
if (!StringUtils.isBlank(msg)) {
|
||||
tv.text = msg
|
||||
}
|
||||
alertDialog!!.setView(view)
|
||||
alertDialog!!.setCanceledOnTouchOutside(false)
|
||||
alertDialog!!.show()
|
||||
}
|
||||
|
||||
fun setLoadingDialogText(s: String?) {
|
||||
//给loading 添加文字
|
||||
val view = alertDialog!!.findViewById<TextView>(R.id.progressBar_tx)
|
||||
view!!.text = s
|
||||
}
|
||||
|
||||
fun dismissLoadingDialog() {
|
||||
if (null != alertDialog && alertDialog!!.isShowing()) {
|
||||
alertDialog!!.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
dismissLoadingDialog()
|
||||
Collector.removeActivity(this)
|
||||
if (EventBus.getDefault().isRegistered(this)) {
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe(sticky = true)
|
||||
open fun onEventMainThrean(data: Map<String?, String>) {
|
||||
if (data["code"] === "101") {
|
||||
// 返回开启GPS导航设置界面
|
||||
val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
|
||||
startActivityForResult(intent, 0)
|
||||
}
|
||||
}
|
||||
}
|
@ -24,7 +24,6 @@ import androidx.core.widget.NestedScrollView;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.github.lazylibrary.util.FileUtils;
|
||||
import com.github.lazylibrary.util.StringUtils;
|
||||
import com.github.lazylibrary.util.ZipUtil;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.permissions.OnPermissionCallback;
|
||||
import com.hjq.permissions.Permission;
|
||||
@ -40,7 +39,6 @@ import com.navinfo.outdoor.activity.FragmentManagement;
|
||||
import com.navinfo.outdoor.activity.PicturesActivity;
|
||||
import com.navinfo.outdoor.api.Constant;
|
||||
import com.navinfo.outdoor.base.BaseDrawerFragment;
|
||||
import com.navinfo.outdoor.bean.OtherUploadPicBean;
|
||||
import com.navinfo.outdoor.bean.PoiVideoBean;
|
||||
import com.navinfo.outdoor.bean.UnPolygonTaskBean;
|
||||
import com.navinfo.outdoor.http.Callback;
|
||||
@ -48,7 +46,6 @@ import com.navinfo.outdoor.http.HttpInterface;
|
||||
import com.navinfo.outdoor.http.OkGoBuilder;
|
||||
import com.navinfo.outdoor.room.ChargingPileEntity;
|
||||
import com.navinfo.outdoor.room.InsertAndUpdateUtils;
|
||||
import com.navinfo.outdoor.room.PoiDao;
|
||||
import com.navinfo.outdoor.room.PoiDatabase;
|
||||
import com.navinfo.outdoor.room.PoiEntity;
|
||||
import com.navinfo.outdoor.util.AWMp4ParserHelper;
|
||||
@ -61,8 +58,6 @@ import com.navinfo.outdoor.util.PoiSaveUtils;
|
||||
import com.navinfo.outdoor.util.PreserveUtils;
|
||||
import com.navinfo.outdoor.util.TimestampUtil;
|
||||
import com.navinfo.outdoor.util.ToastUtils;
|
||||
import com.navinfo.outdoor.util.UploadUtils;
|
||||
import com.navinfo.outdoor.util.ZipUtils;
|
||||
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
||||
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
|
||||
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
|
||||
@ -80,7 +75,6 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 寻宝-上报弹窗-poi录像
|
||||
|
@ -26,7 +26,6 @@ import androidx.core.widget.NestedScrollView;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.github.lazylibrary.util.FileUtils;
|
||||
import com.github.lazylibrary.util.StringUtils;
|
||||
import com.github.lazylibrary.util.ZipUtil;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.permissions.OnPermissionCallback;
|
||||
import com.hjq.permissions.Permission;
|
||||
@ -34,12 +33,10 @@ import com.hjq.permissions.XXPermissions;
|
||||
import com.kongzue.dialog.interfaces.OnDialogButtonClickListener;
|
||||
import com.kongzue.dialog.util.BaseDialog;
|
||||
import com.kongzue.dialog.util.DialogSettings;
|
||||
import com.kongzue.dialog.v3.CustomDialog;
|
||||
import com.kongzue.dialog.v3.MessageDialog;
|
||||
import com.kongzue.dialog.v3.WaitDialog;
|
||||
import com.lzy.okgo.model.HttpParams;
|
||||
import com.navinfo.outdoor.R;
|
||||
import com.navinfo.outdoor.activity.AutoTakePictureActivity;
|
||||
import com.navinfo.outdoor.activity.FragmentManagement;
|
||||
import com.navinfo.outdoor.activity.PicturesActivity;
|
||||
import com.navinfo.outdoor.api.Constant;
|
||||
@ -51,8 +48,6 @@ import com.navinfo.outdoor.util.PoiSaveUtils;
|
||||
import com.navinfo.outdoor.util.PreserveUtils;
|
||||
import com.navinfo.outdoor.util.TimestampUtil;
|
||||
import com.navinfo.outdoor.util.ToastUtils;
|
||||
import com.navinfo.outdoor.util.UploadUtils;
|
||||
import com.navinfo.outdoor.bean.OtherUploadPicBean;
|
||||
import com.navinfo.outdoor.bean.RoadSaveBean;
|
||||
import com.navinfo.outdoor.bean.UnPolygonTaskBean;
|
||||
import com.navinfo.outdoor.http.Callback;
|
||||
@ -60,13 +55,11 @@ import com.navinfo.outdoor.http.HttpInterface;
|
||||
import com.navinfo.outdoor.http.OkGoBuilder;
|
||||
import com.navinfo.outdoor.room.ChargingPileEntity;
|
||||
import com.navinfo.outdoor.room.InsertAndUpdateUtils;
|
||||
import com.navinfo.outdoor.room.PoiDao;
|
||||
import com.navinfo.outdoor.room.PoiDatabase;
|
||||
import com.navinfo.outdoor.room.PoiEntity;
|
||||
import com.navinfo.outdoor.util.AWMp4ParserHelper;
|
||||
import com.navinfo.outdoor.util.Geohash;
|
||||
import com.navinfo.outdoor.util.GeometryTools;
|
||||
import com.navinfo.outdoor.util.ZipUtils;
|
||||
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
||||
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
|
||||
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
|
||||
@ -85,7 +78,6 @@ import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/*
|
||||
* 寻宝-点击上传弹窗-道路
|
||||
|
@ -3,6 +3,7 @@ package com.navinfo.outdoor.util;
|
||||
import android.content.Context;
|
||||
import android.location.Location;
|
||||
import android.os.Message;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.lifecycle.DefaultLifecycleObserver;
|
||||
@ -90,6 +91,11 @@ public class LocationLifeCycle implements DefaultLifecycleObserver {
|
||||
}
|
||||
} else if (msg.arg1 == LOCATION_FROM.TENCENT.ordinal()) {
|
||||
tencentLocation = (TencentLocation) msg.obj;
|
||||
// Log.d("LocationLifeCycle",
|
||||
// "isMockGps:"+tencentLocation.isMockGps()
|
||||
// +",FakeReason:"+tencentLocation.getFakeReason()
|
||||
// +"Provider:"+tencentLocation.getProvider()
|
||||
// +"SourceProvider:"+tencentLocation.getSourceProvider()+tencentLocation.getGpsQuality());
|
||||
if (msg.arg1 == mainLocationFrom.ordinal()) { // 如果当前定位方式是主要定位方式
|
||||
MyLocation location = new MyLocation(tencentLocation.getProvider(), tencentLocation);
|
||||
//设置经纬度以及精度
|
||||
|
@ -0,0 +1,90 @@
|
||||
package com.navinfo.outdoor.util
|
||||
|
||||
import android.content.Context
|
||||
import android.hardware.Sensor
|
||||
import android.hardware.SensorEvent
|
||||
import android.hardware.SensorEventListener
|
||||
import android.hardware.SensorManager
|
||||
import androidx.lifecycle.DefaultLifecycleObserver
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
|
||||
class SensorOritationLifecycle(val context: Context): DefaultLifecycleObserver {
|
||||
private var sensorManager: SensorManager? = null
|
||||
private var accelerometer: Sensor? = null
|
||||
private var magnetic :android.hardware.Sensor? = null
|
||||
private var seneorListener: SensorEventListener? = null
|
||||
private var accelerometerValues = FloatArray(3)
|
||||
private var magneticFieldValues = FloatArray(3)
|
||||
var zDegree: Float = 0f
|
||||
var xDegree: Float = 0f
|
||||
var yDegree: Float = 0f
|
||||
var degreesChangeListener: DegreesChangeListener? = null
|
||||
|
||||
override fun onCreate(owner: LifecycleOwner) {
|
||||
super.onCreate(owner)
|
||||
/**
|
||||
* 初始化传感器
|
||||
* */
|
||||
/**
|
||||
* 初始化传感器
|
||||
*/
|
||||
seneorListener = object : SensorEventListener {
|
||||
override fun onSensorChanged(sensorEvent: SensorEvent) {
|
||||
// 获取角度信息
|
||||
if (sensorEvent.sensor.type == Sensor.TYPE_ACCELEROMETER) {
|
||||
accelerometerValues = sensorEvent.values
|
||||
}
|
||||
if (sensorEvent.sensor.type == Sensor.TYPE_MAGNETIC_FIELD) {
|
||||
magneticFieldValues = sensorEvent.values
|
||||
}
|
||||
calculateOrientation()
|
||||
}
|
||||
|
||||
override fun onAccuracyChanged(sensor: Sensor, i: Int) {}
|
||||
}
|
||||
|
||||
sensorManager = context.getSystemService(Context.SENSOR_SERVICE) as SensorManager
|
||||
if (sensorManager!=null) {
|
||||
with(sensorManager!!) {
|
||||
accelerometer = getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
|
||||
magnetic = getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)
|
||||
registerListener(
|
||||
seneorListener,
|
||||
accelerometer,
|
||||
SensorManager.SENSOR_DELAY_NORMAL
|
||||
)
|
||||
registerListener(
|
||||
seneorListener,
|
||||
magnetic,
|
||||
SensorManager.SENSOR_DELAY_NORMAL
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy(owner: LifecycleOwner) {
|
||||
super.onDestroy(owner)
|
||||
if (sensorManager != null) {
|
||||
sensorManager!!.unregisterListener(seneorListener)
|
||||
}
|
||||
}
|
||||
|
||||
// 计算方向
|
||||
private fun calculateOrientation() {
|
||||
val values = FloatArray(3)
|
||||
val R = FloatArray(9)
|
||||
SensorManager.getRotationMatrix(
|
||||
R, null, accelerometerValues,
|
||||
magneticFieldValues
|
||||
)
|
||||
SensorManager.getOrientation(R, values)
|
||||
zDegree = Math.toDegrees(values[0].toDouble()).toFloat()
|
||||
xDegree = Math.toDegrees(values[1].toDouble()).toFloat()
|
||||
yDegree = Math.toDegrees(values[2].toDouble()).toFloat()
|
||||
degreesChangeListener?.onDegreesChangeListener(xDegree, yDegree, zDegree)
|
||||
}
|
||||
|
||||
interface DegreesChangeListener {
|
||||
fun onDegreesChangeListener(xDegree: Float, yDegree: Float, zDegree: Float)
|
||||
}
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package com.navinfo.outdoor.viewmodel
|
||||
|
||||
import android.content.Intent
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.navinfo.outdoor.api.Constant
|
||||
import com.tencent.tencentmap.mapsdk.maps.interfaces.Removable
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
class RxPicturesViewModel: ViewModel() {
|
||||
private var finalVideoPath: String? = null// 摄像后最终保存的文件名
|
||||
private var geoWkt:String? = null
|
||||
private var detail:String? = null
|
||||
private var type = 0
|
||||
private val radioPicture = 0
|
||||
private var videoIndex = -1
|
||||
private var paperFile: File? = null
|
||||
private var logFile:java.io.File? = null
|
||||
private val removables = mutableListOf<Removable>()
|
||||
|
||||
private fun initDataFromIntent(intent: Intent): Boolean {
|
||||
if (intent != null) {
|
||||
finalVideoPath = intent.getStringExtra(Constant.INTENT_JPG_PATH)
|
||||
type = intent.getIntExtra(Constant.INTENT_TYPE, 0)
|
||||
geoWkt = intent.getStringExtra(Constant.INTENT_GEO_WKT)
|
||||
detail = intent.getStringExtra(Constant.INTENT_DETAIL)
|
||||
if (finalVideoPath != null) {
|
||||
val file: File = File(finalVideoPath)
|
||||
paperFile =
|
||||
File(Objects.requireNonNull(file.parentFile).absoluteFile.toString() + "/" + "paper.txt")
|
||||
videoIndex = file.name.replace(".webp", "").toInt()
|
||||
if (videoIndex == 0) {
|
||||
videoIndex = -1
|
||||
} else {
|
||||
videoIndex = videoIndex - 1
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
@ -31,4 +31,10 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_info"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toTopOf="@id/tab_layout"></TextView>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout >
|
@ -275,5 +275,11 @@
|
||||
app:layout_constraintBottom_toBottomOf="@id/capture_picture"
|
||||
app:layout_constraintLeft_toRightOf="@id/capture_picture"
|
||||
app:layout_constraintRight_toRightOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_degrees"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
></TextView>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
Loading…
x
Reference in New Issue
Block a user