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
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.earthquake.EarthquakeActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clTop"
android:layout_width="match_parent"
android:layout_height="296dp"
android:background="@mipmap/wd_bg"
app:layout_constraintTop_toTopOf="parent">
<FrameLayout
android:id="@+id/flBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/fanhui"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="Earthquake Details"
android:textColor="#000000"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/flBack"
app:layout_constraintStart_toEndOf="@id/flBack"
app:layout_constraintTop_toTopOf="@id/flBack"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:src="@mipmap/wd_tu"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/flBack"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="240dp"
app:layout_constraintBottom_toTopOf="@id/fl_ad"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="6dp"
app:cardBackgroundColor="@color/white"
app:cardCornerRadius="10dp"
app:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingVertical="13dp">
<TextView
android:id="@+id/tvWhere"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:textColor="#000000"
android:textSize="16sp"
tools:text="Changning, Sichuan(E104.9,N28.2)" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:layout_marginTop="13dp"
android:text="Origin time of earthquake"
android:textColor="#999999"
android:textSize="15sp" />
<TextView
android:id="@+id/tvTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:textSize="15sp"
tools:text="2019-06-17 22:55:12" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:layout_marginTop="8dp"
android:text="Warning magnitude"
android:textColor="#999999"
android:textSize="15sp" />
<TextView
android:id="@+id/tvLevel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:textSize="15sp"
tools:text="Level 6.1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:layout_marginTop="8dp"
android:text="Source depth"
android:textColor="#999999"
android:textSize="15sp" />
<TextView
android:id="@+id/tvDepth"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:textSize="15sp"
tools:text="8 Kilometers" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="6dp"
android:visibility="gone"
app:cardBackgroundColor="@color/white"
app:cardCornerRadius="10dp"
app:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingVertical="13dp">
<TextView
android:id="@+id/tvIntensityTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:text="Estimated Intensity"
android:textColor="#999999"
android:textSize="15sp"
android:visibility="gone" />
<TextView
android:id="@+id/tvIntensity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:layout_marginBottom="8dp"
android:textSize="15sp"
android:visibility="gone"
tools:text="3 Degrees (strong vibration sensation)" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:text="Warning time"
android:textColor="#999999"
android:textSize="15sp" />
<TextView
android:id="@+id/tvWarningTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:textSize="15sp"
tools:text="61 S" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:layout_marginTop="8dp"
android:text="Distance from the epicenter to you"
android:textColor="#999999"
android:textSize="15sp" />
<TextView
android:id="@+id/tvDistance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:textSize="15sp"
tools:text="260 Kilometers" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<com.base.scanqrclear.ads.NativeParentView
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginBottom="16dp"
android:background="@drawable/bg_ecf6ff_20"
android:minHeight="133dp"
app:layout_constraintBottom_toBottomOf="parent">
<io.supercharge.shimmerlayout.ShimmerLayout
android:id="@+id/shimmerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="16dp"
app:shimmer_angle="25"
app:shimmer_animation_duration="2000"
app:shimmer_auto_start="true"
app:shimmer_color="#33ffffff"
app:shimmer_mask_width="0.2">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@mipmap/czhanweitu"
tools:ignore="ContentDescription,ImageContrastCheck" />
</io.supercharge.shimmerlayout.ShimmerLayout>
</com.base.scanqrclear.ads.NativeParentView>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -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