调整mapapi

This commit is contained in:
squallzhjch
2023-03-24 13:56:13 +08:00
parent 6a249a254a
commit 5e8b75005f
43 changed files with 1873 additions and 1631 deletions

View File

@@ -1,18 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
xmlns:tools="http://schemas.android.com/tools"
package="com.navinfo.omqs">
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于访问wifi网络信息wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 这个权限用于获取wifi的获取权限wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 允许访问振动设备 -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- android 9.0上使用前台服务,需要添加权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 读取缓存数据 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
android:theme="@style/Theme.OMQualityInspection"
tools:targetApi="31">
<activity
android:name=".ui.LoginActivity"
android:name=".ui.activity.LoginActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.OMQualityInspection">
@@ -22,6 +47,10 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.activity.MainActivity"
android:exported="true"
android:theme="@style/Theme.OMQualityInspection"></activity>
</application>
</manifest>

View File

@@ -1,13 +0,0 @@
package com.navinfo.omqs.ui
import android.content.pm.ActivityInfo
import android.os.Bundle
import android.os.PersistableBundle
import androidx.appcompat.app.AppCompatActivity
open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE//横屏
}
}

View File

@@ -1,33 +0,0 @@
package com.navinfo.omqs.ui
import android.os.Bundle
import android.os.PersistableBundle
import androidx.activity.viewModels
import androidx.databinding.DataBindingUtil
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.ActivityLoginBinding
class LoginActivity : PermissionsActivity() {
private lateinit var binding: ActivityLoginBinding
private val viewModel by viewModels<LoginActivityViewModel>()
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
binding = DataBindingUtil.inflate(layoutInflater, R.layout.activity_login, null, false)
binding.lifecycleOwner = this
setContentView(binding.root)
}
override fun onPermissionsGranted() {
initView()
}
private fun initView() {
}
override fun onPermissionsDenied() {
}
}

View File

@@ -1,7 +0,0 @@
package com.navinfo.omqs.ui
import androidx.lifecycle.ViewModel
class LoginActivityViewModel : ViewModel() {
}

View File

@@ -1,62 +0,0 @@
package com.navinfo.omqs.ui
import android.os.Bundle
import com.google.android.material.snackbar.Snackbar
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import android.view.Menu
import android.view.MenuItem
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
WindowCompat.setDecorFitsSystemWindows(window, false)
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
val navController = findNavController(R.id.nav_host_fragment_content_main)
appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
binding.fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAnchorView(R.id.fab)
.setAction("Action", null).show()
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
return when (item.itemId) {
R.id.action_settings -> true
else -> super.onOptionsItemSelected(item)
}
}
override fun onSupportNavigateUp(): Boolean {
val navController = findNavController(R.id.nav_host_fragment_content_main)
return navController.navigateUp(appBarConfiguration)
|| super.onSupportNavigateUp()
}
}

View File

@@ -0,0 +1,16 @@
package com.navinfo.omqs.ui.activity
import android.content.pm.ActivityInfo
import android.os.Bundle
import android.os.PersistableBundle
import androidx.appcompat.app.AppCompatActivity
/**
* 基类
*/
open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE//横屏
super.onCreate(savedInstanceState)
}
}

View File

@@ -0,0 +1,40 @@
package com.navinfo.omqs.ui.activity
import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.databinding.DataBindingUtil
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.ActivityLoginBinding
/**
* 登陆页面
*/
class LoginActivity : PermissionsActivity() {
private lateinit var binding: ActivityLoginBinding
private val viewModel by viewModels<LoginViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_login)
binding.loginUserModel = viewModel
binding.lifecycleOwner = this
binding.activity = this
}
override fun onPermissionsGranted() {
}
override fun onPermissionsDenied() {
}
/**
* 处理登录按钮
*/
fun onClickLoginButton() {
val intent = Intent(this@LoginActivity, MainActivity::class.java)
startActivity(intent)
finish()
}
}

View File

@@ -0,0 +1,23 @@
package com.navinfo.omqs.ui.activity
import android.view.View
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.navinfo.omqs.model.LoginUser
class LoginViewModel : ViewModel() {
val loginUser: MutableLiveData<LoginUser> = MutableLiveData()
init {
loginUser.value = LoginUser(username = "admin", password = "123456")
}
/**
* 处理注册按钮
*/
fun onClick(view: View) {
loginUser.value!!.username = "admin2"
loginUser.postValue(loginUser.value)
}
}

View File

@@ -0,0 +1,32 @@
package com.navinfo.omqs.ui.activity
import android.os.Bundle
import androidx.activity.viewModels
import androidx.core.view.WindowCompat
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.LifecycleOwner
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.ActivityMainBinding
/**
* 地图主页面
*/
class MainActivity : BaseActivity() {
private lateinit var binding: ActivityMainBinding
private val viewModel by viewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
WindowCompat.setDecorFitsSystemWindows(window, false)
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.lifecycleOwner = this
viewModel.initMap(this, binding.mainActivityMap)
lifecycle.addObserver(viewModel)
// val navController = findNavController(R.id.nav_host_fragment_content_main)
}
}

View File

@@ -0,0 +1,36 @@
package com.navinfo.omqs.ui.activity
import android.content.Context
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ViewModel
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.map.NIMapView
class MainViewModel : ViewModel(), DefaultLifecycleObserver {
private lateinit var mapController: NIMapController
fun initMap(context: Context, mapView: NIMapView) {
mapController = NIMapController(context = context, mapView = mapView)
}
override fun onStart(owner: LifecycleOwner) {
super.onStart(owner)
mapController.locationLayerHandler.startLocation()
}
override fun onPause(owner: LifecycleOwner) {
mapController.mMapView.onPause()
}
override fun onDestroy(owner: LifecycleOwner) {
mapController.mMapView.onDestroy()
mapController.locationLayerHandler.stopLocation()
}
override fun onResume(owner: LifecycleOwner) {
mapController.mMapView.onResume()
}
}

View File

@@ -1,9 +1,8 @@
package com.navinfo.omqs.ui
package com.navinfo.omqs.ui.activity
import android.os.Build
import android.os.Bundle
import android.os.PersistableBundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.hjq.permissions.OnPermissionCallback
import com.hjq.permissions.Permission
import com.hjq.permissions.XXPermissions
@@ -11,14 +10,30 @@ import com.hjq.permissions.XXPermissions
/**
* 权限申请Activity
*/
abstract class PermissionsActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
open class PermissionsActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val permissionList = mutableListOf<String>()
if (applicationInfo.targetSdkVersion >= Build.VERSION_CODES.TIRAMISU) {
//文件读写
permissionList.add(Permission.READ_MEDIA_IMAGES)
permissionList.add(Permission.READ_MEDIA_AUDIO)
permissionList.add(Permission.READ_MEDIA_VIDEO)
} else {
//文件读写
permissionList.add(Permission.WRITE_EXTERNAL_STORAGE)
permissionList.add(Permission.READ_EXTERNAL_STORAGE)
permissionList.add(Permission.READ_MEDIA_VIDEO)
}
//定位权限
permissionList.add(Permission.ACCESS_FINE_LOCATION)
permissionList.add(Permission.ACCESS_COARSE_LOCATION)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
permissionList.add(Permission.ACCESS_BACKGROUND_LOCATION)
}
XXPermissions.with(this)
// 申请单个权限
.permission(Permission.WRITE_EXTERNAL_STORAGE)
.permission(Permission.READ_EXTERNAL_STORAGE)
.permission(permissionList)
// 设置权限请求拦截器(局部设置)
//.interceptor(new PermissionInterceptor())
// 设置不触发错误检测机制(局部设置)
@@ -35,6 +50,8 @@ abstract class PermissionsActivity : BaseActivity() {
.show()
onPermissionsGranted()
return
} else {
onPermissionsDenied()
}
// 在SD卡创建项目目录
}
@@ -51,11 +68,23 @@ abstract class PermissionsActivity : BaseActivity() {
XXPermissions.startPermissionActivity(this@PermissionsActivity, permissions)
onPermissionsDenied()
} else {
onPermissionsDenied()
}
}
})
}
abstract fun onPermissionsGranted()
abstract fun onPermissionsDenied()
/**
* 权限全部同意
*/
open fun onPermissionsGranted() {
}
/**
* 权限
*/
open fun onPermissionsDenied() {
}
}

View File

@@ -1,4 +1,4 @@
package com.navinfo.omqs
package com.navinfo.omqs.ui.fragment
import android.os.Bundle
import androidx.fragment.app.Fragment
@@ -6,6 +6,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.findNavController
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.FragmentFirstBinding
/**

View File

@@ -1,4 +1,4 @@
package com.navinfo.omqs
package com.navinfo.omqs.ui.fragment
import android.os.Bundle
import androidx.fragment.app.Fragment
@@ -6,6 +6,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.findNavController
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.FragmentSecondBinding
/**
@@ -22,7 +23,7 @@ class SecondFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
): View {
_binding = FragmentSecondBinding.inflate(inflater, container, false)
return binding.root

View File

@@ -4,27 +4,33 @@
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="loginUser"
type="com.navinfo.omqs.model.LoginUser" />
name="activity"
type="com.navinfo.omqs.ui.activity.LoginActivity" />
<variable
name="loginUserModel"
type="com.navinfo.omqs.ui.activity.LoginViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.navinfo.volvo.ui.fragments.login.LoginFragment">
tools:context=".ui.activity.LoginActivity">
<ImageView
android:id="@+id/login_fragment_logo"
android:layout_width="100dp"
android:layout_height="100dp"
android:contentDescription="@string/imagedescription"
android:scaleType="fitXY"
android:src="@mipmap/ic_launcher"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.2"
app:layout_constraintVertical_bias="0.1"
app:roundPercent="0.2" />
<com.google.android.material.textfield.TextInputLayout
@@ -43,8 +49,8 @@
android:id="@+id/login_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{loginUser.username}"
android:hint="请输入用户名" />
android:hint="@string/input_user_name"
android:text="@{loginUserModel.loginUser.username}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
@@ -58,32 +64,34 @@
android:id="@+id/login_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/input_password"
android:inputType="textPassword"
android:text="@{loginUser.password}"
android:hint="请输入密码" />
android:text="@{loginUserModel.loginUser.password}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
android:id="@+id/login_fragment_register_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{(view)->loginUserModel.onClick(view)}"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="注册"
android:text="@string/logon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/login_fragment_login_button"
app:layout_constraintRight_toLeftOf="@id/login_activity_login_button"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.7" />
app:layout_constraintVertical_bias="0.8" />
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
android:id="@+id/login_fragment_login_button"
android:id="@+id/login_activity_login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{()->activity.onClickLoginButton()}"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="登录"
android:text="@string/login"
app:layout_constraintBaseline_toBaselineOf="@id/login_fragment_register_button"
app:layout_constraintLeft_toRightOf="@id/login_fragment_register_button"
app:layout_constraintRight_toRightOf="parent" />

View File

@@ -1,34 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".ui.MainActivity">
xmlns:tools="http://schemas.android.com/tools">
<com.google.android.material.appbar.AppBarLayout
<data>
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".ui.activity.MainActivity">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
<com.navinfo.collect.library.map.NIMapView
android:id="@+id/main_activity_map"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
android:layout_height="match_parent" />
</com.google.android.material.appbar.AppBarLayout>
<include layout="@layout/content_main" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginEnd="@dimen/fab_margin"
android:layout_marginBottom="16dp"
app:srcCompat="@android:drawable/ic_dialog_email" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FirstFragment">
tools:context=".ui.fragment.FirstFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"

View File

@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondFragment">
tools:context=".ui.fragment.SecondFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"

View File

@@ -1,7 +1,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.navinfo.omqs.ui.MainActivity">
tools:context="com.navinfo.omqs.ui.activity.MainActivity">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"

View File

@@ -7,7 +7,7 @@
<fragment
android:id="@+id/FirstFragment"
android:name="com.navinfo.omqs.FirstFragment"
android:name="com.navinfo.omqs.ui.fragment.FirstFragment"
android:label="@string/first_fragment_label"
tools:layout="@layout/fragment_first">
@@ -17,7 +17,7 @@
</fragment>
<fragment
android:id="@+id/SecondFragment"
android:name="com.navinfo.omqs.SecondFragment"
android:name="com.navinfo.omqs.ui.fragment.SecondFragment"
android:label="@string/second_fragment_label"
tools:layout="@layout/fragment_second">

View File

@@ -43,4 +43,9 @@
libero vel nunc consequat, quis tincidunt nisl eleifend. Cras bibendum enim a justo luctus
vestibulum. Fusce dictum libero quis erat maximus, vitae volutpat diam dignissim.
</string>
<string name="input_user_name">请输入用户名</string>
<string name="input_password">请输入密码</string>
<string name="login">登录</string>
<string name="logon">注册</string>
<string name="imagedescription">imageDescription</string>
</resources>