diff --git a/app/build.gradle b/app/build.gradle
index 93cc26c..58798e9 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,13 +1,14 @@
apply plugin: 'com.android.application'
+
android {
- compileSdkVersion 30
- buildToolsVersion "30.0.3"
- ndkVersion '23.0.7123448'
+ compileSdkVersion 29
+ buildToolsVersion "29.0.0"
+ // ndkVersion '23.0.7123448'
defaultConfig {
applicationId "com.navinfo.outdoor"
- minSdkVersion 23
- targetSdkVersion 22
+ minSdkVersion 22
+ targetSdkVersion 30
versionCode 1
versionName "1.0"
@@ -25,12 +26,6 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
- lintOptions {
- checkReleaseBuilds false
- // Or, if you prefer, you can continue to check for errors in release builds,
- // but continue the build even when errors are found:
- abortOnError false
- }
}
//efs {
// //是否对启动过程进程插桩的开关,如果使用自动集成监控则必须开启
@@ -112,6 +107,10 @@ dependencies {
//腾讯地图 定位
implementation 'com.tencent.map.geolocation:TencentLocationSdk-openplatform:7.2.6'
+
+ // 权限请求框架:https://github.com/getActivity/XXPermissions
+ implementation 'com.github.getActivity:XXPermissions:11.5'
+
//room 数据库
def room_version = "2.2.0-alpha01"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e2da094..eb21953 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,9 @@
-
+
+
+
@@ -26,6 +28,8 @@
+
+
@@ -34,19 +38,12 @@
android:name=".api.UserApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
+ android:requestLegacyExternalStorage="true"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme.NoActionBar">
-
-
-
-
+
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/outdoor/activity/FilterActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/FilterActivity.java
new file mode 100644
index 0000000..2fd5ed4
--- /dev/null
+++ b/app/src/main/java/com/navinfo/outdoor/activity/FilterActivity.java
@@ -0,0 +1,76 @@
+package com.navinfo.outdoor.activity;
+
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.constraintlayout.widget.ConstraintLayout;
+
+import com.kongzue.dialog.interfaces.OnMenuItemClickListener;
+import com.kongzue.dialog.v3.BottomMenu;
+import com.navinfo.outdoor.R;
+import com.navinfo.outdoor.base.BaseActivity;
+
+/**
+ * 筛选的activity
+ */
+public class FilterActivity extends BaseActivity implements View.OnClickListener {
+
+ private ImageView ivFilter;
+ private TextView tvType;
+ private TextView tvDist;
+ private Button btnFilter;
+
+ @Override
+ protected int getLayout() {
+ return R.layout.activity_filter;
+ }
+
+ @Override
+ protected void initView() {
+ super.initView();
+ ConstraintLayout clDist = findViewById(R.id.cl_dist);
+ clDist.setOnClickListener(this::onClick);
+ ConstraintLayout clType = findViewById(R.id.cl_type);
+ clType.setOnClickListener(this::onClick);
+ tvType = findViewById(R.id.tv_type);
+ tvDist = findViewById(R.id.tv_dist);
+ btnFilter = findViewById(R.id.btn_filter);
+ btnFilter.setOnClickListener(this::onClick);
+ ivFilter = findViewById(R.id.iv_filter);
+ ivFilter.setOnClickListener(this);
+ }
+
+ @Override
+ protected void initData() {
+ super.initData();
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.btn_filter:
+ case R.id.iv_filter:
+ finish();
+ break;
+ case R.id.cl_dist:
+ BottomMenu.show(FilterActivity.this, new String[]{"100米", "200米", "500米", "1000米", "2000米", "2500米", "5000米"}, new OnMenuItemClickListener() {
+ @Override
+ public void onClick(String text, int index) {
+ tvDist.setText(text);
+
+ }
+ });
+ break;
+ case R.id.cl_type:
+ BottomMenu.show(FilterActivity.this, new String[]{"poi", "道路", "充电站", "其他"}, new OnMenuItemClickListener() {
+ @Override
+ public void onClick(String text, int index) {
+ tvType.setText(text);
+ }
+ });
+ }
+
+ }
+}
diff --git a/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java
index 9d34881..7fa1110 100644
--- a/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java
+++ b/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java
@@ -1,19 +1,26 @@
package com.navinfo.outdoor.activity;
-import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.content.Intent;
+import android.content.pm.PermissionGroupInfo;
import android.os.CountDownTimer;
+import android.view.View;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+import com.kongzue.dialog.interfaces.OnDialogButtonClickListener;
+import com.kongzue.dialog.util.BaseDialog;
+import com.kongzue.dialog.v3.MessageDialog;
import com.navinfo.outdoor.R;
-import com.navinfo.outdoor.api.Constant;
import com.navinfo.outdoor.base.BaseActivity;
import com.kongzue.dialog.util.DialogSettings;
-import com.navinfo.outdoor.util.BackHandlerHelper;
-import com.navinfo.outdoor.util.PermissionUtil;
+
+import java.util.List;
/**
* 启动页
@@ -28,48 +35,71 @@ public class MainActivity extends BaseActivity {
@Override
protected void initData() {
super.initData();
-
-
- new CountDownTimer(3000, 1000) {
- @Override
- public void onTick(long l) {
- }
-
- @Override
- public void onFinish() {
- Intent intent = new Intent(MainActivity.this, LoginActivity.class);
- startActivity(intent);
- finish();
- }
- }.start();
//必须全局才可以改变样式
DialogSettings.style = (DialogSettings.STYLE.STYLE_KONGZUE);
DialogSettings.init();//初始化清空 BaseDialog 队列
}
private void initPermission() {
- String[] pers = {
- Manifest.permission.RECORD_AUDIO,
- Manifest.permission.CAMERA,
- Manifest.permission.INTERNET,
- Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.READ_PHONE_STATE,
- Manifest.permission.ACCESS_COARSE_LOCATION
- };
+ XXPermissions.with(this)
+ // 申请安装包权限
+ //.permission(Permission.REQUEST_INSTALL_PACKAGES)
+ // 申请悬浮窗权限
+ //.permission(Permission.SYSTEM_ALERT_WINDOW)
+ // 申请通知栏权限
+ //.permission(Permission.NOTIFICATION_SERVICE)
+ // 申请系统设置权限
+ //.permission(Permission.WRITE_SETTINGS)
+ // 申请单个权限
+ .permission(Permission.RECORD_AUDIO)
+ // 申请多个权限
+ .permission(Permission.Group.CALENDAR)
+ // 申请读写外部存储卡
+ .permission(Permission.MANAGE_EXTERNAL_STORAGE)
+ // 申请相机权限
+ .permission(Permission.CAMERA)
+ // 位置权限
+ .permission(Permission.ACCESS_FINE_LOCATION)
+// .permission(Permission.ACCESS_BACKGROUND_LOCATION)
+ .permission(Permission.ACCESS_COARSE_LOCATION)
+ //读写权限
+ .permission(Permission.READ_PHONE_STATE)
+ .request(new OnPermissionCallback() {
- PermissionUtil.getInstance().checkPermission(this, pers, new Runnable() {
- @Override
- public void run() {
- }
- });
+ @Override
+ public void onGranted(List permissions, boolean all) {
+ if (all) {
+ new CountDownTimer(3000, 1000) {
+ @Override
+ public void onTick(long l) {
+ }
+ @Override
+ public void onFinish() {
+ Intent intent = new Intent(MainActivity.this, LoginActivity.class);
+ startActivity(intent);
+ finish();
+ }
+ }.start();
+ }
+ }
+
+ @Override
+ public void onDenied(List permissions, boolean never) {
+ if (never) {
+ DialogSettings.style = DialogSettings.STYLE.STYLE_KONGZUE;
+ MessageDialog.show(MainActivity.this, "提示", permissions.toString()+" 被永久拒绝授权请手动授权,", "确定").setOkButton(new OnDialogButtonClickListener() {
+ @Override
+ public boolean onClick(BaseDialog baseDialog, View v) {
+ XXPermissions.startPermissionActivity(MainActivity.this, permissions);
+ finish();
+ return false;
+ }
+ });
+
+ }
+ }
+ });
}
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- }
-
@Override
protected void initView() {
super.initView();
diff --git a/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java
index e86fa13..676e8ce 100644
--- a/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java
+++ b/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java
@@ -6,16 +6,10 @@ import androidx.annotation.Nullable;
import android.content.Intent;
import android.content.pm.ActivityInfo;
-
-import android.content.res.Resources;
-
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.location.Location;
-
-import android.media.Image;
-
import android.os.Looper;
import android.os.Message;
import android.util.DisplayMetrics;
@@ -27,6 +21,7 @@ import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;
+
import com.navinfo.outdoor.R;
import com.navinfo.outdoor.api.Constant;
import com.navinfo.outdoor.base.BaseActivity;
@@ -43,6 +38,7 @@ import com.otaliastudios.cameraview.PictureResult;
import com.otaliastudios.cameraview.VideoResult;
import com.otaliastudios.cameraview.controls.Engine;
import com.otaliastudios.cameraview.controls.Mode;
+
import com.otaliastudios.cameraview.size.AspectRatio;
import com.otaliastudios.cameraview.size.SizeSelectors;
import com.tencent.map.geolocation.TencentLocation;
@@ -77,7 +73,8 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene
private ImageButton capturePicture;
private long captureTime = 0;
private android.widget.Button btnSwitch;
-
+ private boolean USE_FRAME_PROCESSOR = false;
+ private boolean DECODE_BITMAP = false;
private TencentMap tencentMap;
private TencentLocationManager locationManager;
private TencentLocationRequest locationRequest;
diff --git a/app/src/main/java/com/navinfo/outdoor/activity/camer/MyCamerActivity.kt b/app/src/main/java/com/navinfo/outdoor/activity/camer/MyCamerActivity.kt
deleted file mode 100644
index f1ac3a6..0000000
--- a/app/src/main/java/com/navinfo/outdoor/activity/camer/MyCamerActivity.kt
+++ /dev/null
@@ -1,430 +0,0 @@
-package com.navinfo.outdoor.activity.camer
-
-import android.animation.ValueAnimator
-import android.content.Intent
-import android.content.pm.ActivityInfo
-import android.content.pm.PackageManager
-import android.graphics.*
-import android.os.Bundle
-import android.view.View
-import android.view.ViewGroup
-import android.widget.ImageButton
-import android.widget.ImageView
-import android.widget.Toast
-import androidx.appcompat.app.AppCompatActivity
-import com.google.android.material.bottomsheet.BottomSheetBehavior
-import com.navinfo.outdoor.R
-import com.otaliastudios.cameraview.*
-import com.otaliastudios.cameraview.controls.Facing
-import com.otaliastudios.cameraview.controls.Mode
-import com.otaliastudios.cameraview.controls.Preview
-import com.otaliastudios.cameraview.filter.Filters
-import com.otaliastudios.cameraview.frame.Frame
-import com.otaliastudios.cameraview.frame.FrameProcessor
-import com.tencent.map.geolocation.TencentLocationManager
-import com.tencent.map.geolocation.TencentLocationRequest
-import com.tencent.tencentmap.mapsdk.maps.TencentMap
-import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle
-import kotlinx.android.synthetic.main.activity_camera.*
-import kotlinx.android.synthetic.main.activity_my_camer.*
-import kotlinx.android.synthetic.main.activity_my_camer.capturePicture
-import kotlinx.android.synthetic.main.activity_my_camer.capturePictureSnapshot
-import java.io.ByteArrayOutputStream
-import java.io.File
-
-class MyCamerActivity : AppCompatActivity(), View.OnClickListener, OptionView.Callback {
-
- companion object {
- private val LOG = CameraLogger.create("DemoApp")
- private const val USE_FRAME_PROCESSOR = false
- private const val DECODE_BITMAP = false
- }
-
- private var locationManager: TencentLocationManager? = null
- private var locationRequest: TencentLocationRequest? = null
- private val tencentMap: TencentMap? = null
- private var locationStyle: MyLocationStyle? = null
- private val camera: CameraView by lazy { findViewById(R.id.camera) }
- private val edit : ImageButton by lazy { findViewById(R.id.edit) }
- private val ivmap: ImageView by lazy { findViewById(R.id.iv_map) }
- // private val ivmap: MapView by lazy { findViewById(R.id.iv_map) }
-
- private val controlPanel: ViewGroup by lazy { findViewById(R.id.controls) }
- private var captureTime: Long = 0
-
- private var currentFilter = 0
- private val allFilters = Filters.values()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_camera)
- CameraLogger.setLogLevel(CameraLogger.LEVEL_VERBOSE)
- camera.setLifecycleOwner(this)
- camera.addCameraListener(Listener())
- if (USE_FRAME_PROCESSOR) {
- camera.addFrameProcessor(object : FrameProcessor {
- private var lastTime = System.currentTimeMillis()
- override fun process(frame: Frame) {
- val newTime = frame.time
- val delay = newTime - lastTime
- lastTime = newTime
- LOG.v("Frame delayMillis:", delay, "FPS:", 1000 / delay)
- if (DECODE_BITMAP) {
- if (frame.format == ImageFormat.NV21
- && frame.dataClass == ByteArray::class.java) {
- val data = frame.getData()
- val yuvImage = YuvImage(data,
- frame.format,
- frame.size.width,
- frame.size.height,
- null)
- val jpegStream = ByteArrayOutputStream()
- yuvImage.compressToJpeg(Rect(0, 0,
- frame.size.width,
- frame.size.height), 100, jpegStream)
- val jpegByteArray = jpegStream.toByteArray()
- val bitmap = BitmapFactory.decodeByteArray(jpegByteArray,
- 0, jpegByteArray.size)
- bitmap.toString()
- }
- }
- }
- })
- }
- edit.setOnClickListener(this)
- capturePicture.setOnClickListener(this)
- capturePictureSnapshot.setOnClickListener(this)
- btn_switch.setOnClickListener(this)
- // captureVideo.setOnClickListener(this)
- // captureVideoSnapshot.setOnClickListener(this)
- // toggleCamera.setOnClickListener(this)
-
- val group = controlPanel.getChildAt(0) as ViewGroup
- // val watermark = findViewById( R.id.watermark)
- val options: List