Commit b3b3f240 authored by wanglei's avatar wanglei

...

parent 47b0ec03
......@@ -40,7 +40,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.ScanQR"
tools:targetApi="31">
<activity
android:name=".ui.earthquake.EarthquakeActivity"
android:exported="false" />
<activity
android:name=".ui.start.StartActivity"
android:exported="true"
......
package com.base.scanqrclear.bean
data class EarthquakeData(
val features: List<EarthquakeBean>
)
data class EarthquakeBean(
val properties: EarthquakeProperties,
val geometry: EarthquakeGeometry,
)
data class EarthquakeProperties(
val mag: Float,//震级
val place: String,//地点
val time: Long,//发生时间
val mmi: Any?,//烈度(Intensity)通常用Modified Mercalli Intensity (MMI)
)
data class EarthquakeGeometry(
val coordinates: DoubleArray,//第三个表示深度
)
package com.base.scanqrclear.luma
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
......@@ -19,6 +20,7 @@ import com.base.scanqrclear.bean.ListBean
import com.base.scanqrclear.bean.WeatherBean
import com.base.scanqrclear.bean.config.AdConfigBean
import com.base.scanqrclear.databinding.ActivityWeatherBinding
import com.base.scanqrclear.ui.earthquake.EarthquakeActivity
import com.base.scanqrclear.utils.BarUtils
import kotlin.random.Random
......@@ -80,6 +82,10 @@ class WeatherInterface : BaseActivity2() {
}
}
})
binding.ivEarthquake.setOnClickListener {
startActivity(Intent(this, EarthquakeActivity::class.java))
}
}
private fun getData() {
......
package com.base.scanqrclear.ui.earthquake
import android.annotation.SuppressLint
import android.location.LocationManager
import android.view.View
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import com.base.scanqrclear.R
import com.base.scanqrclear.ads.AdsMgr
import com.base.scanqrclear.base.BaseActivity
import com.base.scanqrclear.bean.EarthquakeData
import com.base.scanqrclear.databinding.ActivityEarthquakeBinding
import com.base.scanqrclear.utils.BarUtils
import com.base.scanqrclear.utils.KotlinExt.toFormatTime3
import com.base.scanqrclear.utils.LogEx
import com.google.gson.Gson
import com.gyf.immersionbar.ktx.immersionBar
import okhttp3.OkHttpClient
import okhttp3.Request
class EarthquakeActivity : BaseActivity<ActivityEarthquakeBinding>(ActivityEarthquakeBinding::inflate) {
@SuppressLint("SetTextI18n", "MissingPermission")
override fun initView() {
super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_item)
Thread {
val data = fetchEarthquakeData()
val oneData = data?.features?.maxBy { it.properties.mag }
oneData?.let {
runOnUiThread {
kotlin.runCatching {
binding.tvWhere.text = it.properties.place
binding.tvTime.text = it.properties.time.toFormatTime3()
binding.tvLevel.text = "Level " + "${it.properties.mag}"
binding.tvDepth.text = it.geometry.coordinates[2].toInt().toString() + " Kilometers"
if (it.properties.mmi != null) {
binding.tvIntensityTitle.visibility = View.VISIBLE
binding.tvIntensity.visibility = View.VISIBLE
binding.tvIntensity.text = it.properties.mmi.toString()
}
// binding.tvWarningTime.text = "" + " S"
}
}
}
}.start()
launcher.launch(
arrayOf(
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.LOCATION_HARDWARE,
)
) {
val locationManager = getSystemService(LOCATION_SERVICE) as LocationManager
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
0L,
0f
) { location ->
LogEx.logDebug(TAG, "${location.altitude} ${location.longitude}")
}
}
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
finish()
}
binding.flBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
}
override fun configSystemBar() {
immersionBar {
statusBarColor("#00FFFFFF")
statusBarDarkFont(false)
}
}
private fun fetchEarthquakeData(): EarthquakeData? {
try {
val client = OkHttpClient()
val request = Request.Builder()
.url("https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson")
.build()
val response = client.newCall(request).execute()
val responseBody = response.body?.string()
if (responseBody == null) {
LogEx.logDebug(TAG, "responseBody=null")
return null
} else {
val gson = Gson()
val earthquakeData = gson.fromJson(responseBody, EarthquakeData::class.java)
return earthquakeData
}
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
private fun haversineDistance(lat1: Double, lon1: Double, lat2: Double, lon2: Double): Double {
val R = 6371 // 地球半径,单位:千米
val latDistance = Math.toRadians(lat2 - lat1)
val lonDistance = Math.toRadians(lon2 - lon1)
val a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2)
val c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
return R * c // 返回距离,单位:千米
}
}
\ No newline at end of file
This diff is collapsed.
......@@ -31,6 +31,24 @@
app:layout_constraintTop_toTopOf="@+id/id_back"
tools:text="ChengDu" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivEarthquake"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:src="@mipmap/earthquake"
app:layout_constraintBottom_toBottomOf="@id/id_back"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/id_back" />
<ImageView
android:layout_width="6dp"
android:layout_height="6dp"
android:background="@drawable/bg_fb1f1f"
app:layout_constraintEnd_toEndOf="@id/ivEarthquake"
app:layout_constraintTop_toTopOf="@id/ivEarthquake"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/id_tv_date"
android:layout_width="wrap_content"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment