package com.example.firstapp
|
|
import android.content.IntentFilter
|
import android.os.Bundle
|
import android.provider.Telephony
|
import android.widget.Toast
|
import androidx.activity.result.contract.ActivityResultContracts
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
import androidx.appcompat.app.AppCompatActivity
|
import androidx.core.content.ContextCompat
|
import androidx.navigation.findNavController
|
import androidx.navigation.ui.AppBarConfiguration
|
import androidx.navigation.ui.setupActionBarWithNavController
|
import androidx.navigation.ui.setupWithNavController
|
import com.example.firstapp.databinding.ActivityMainBinding
|
import com.example.firstapp.receiver.SmsReceiver
|
import android.Manifest
|
import android.content.BroadcastReceiver
|
import android.content.Context
|
import android.content.Intent
|
import androidx.lifecycle.ViewModelProvider
|
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.RecyclerView
|
import com.example.firstapp.adapter.MyAdapter
|
import com.example.firstapp.core.Core
|
import com.example.firstapp.entity.Item
|
import com.example.firstapp.ui.home.HomeViewModel
|
|
class MainActivity : AppCompatActivity() {
|
|
private lateinit var binding: ActivityMainBinding
|
|
private var smsReceiver:SmsReceiver? = null
|
|
private lateinit var adapter: MyAdapter
|
private lateinit var homeViewModel: HomeViewModel
|
|
|
// 权限请求代码
|
private val permissionRequest = registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
|
if (isGranted) {
|
// 权限授予后注册短信监听器
|
registerSmsReceiver()
|
} else {
|
// 权限拒绝,提示用户
|
Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show()
|
}
|
}
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
super.onCreate(savedInstanceState)
|
|
binding = ActivityMainBinding.inflate(layoutInflater)
|
setContentView(binding.root)
|
|
// 在此位置初始化 homeViewModel
|
homeViewModel = ViewModelProvider(this).get(HomeViewModel::class.java)
|
|
val navView: BottomNavigationView = binding.navView
|
|
val navController = findNavController(R.id.nav_host_fragment_activity_main)
|
// Passing each menu ID as a set of Ids because each
|
// menu should be considered as top level destinations.
|
val appBarConfiguration = AppBarConfiguration(
|
setOf(
|
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
|
)
|
)
|
setupActionBarWithNavController(navController, appBarConfiguration)
|
navView.setupWithNavController(navController)
|
|
// 检查权限
|
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != android.content.pm.PackageManager.PERMISSION_GRANTED) {
|
// 请求权限
|
permissionRequest.launch(Manifest.permission.READ_SMS)
|
} else {
|
// 权限已经授予,继续执行相关操作
|
registerSmsReceiver()
|
}
|
|
|
// 模拟数据
|
// val items = listOf(
|
// Item(1, "First Item", "This is the first item description"),
|
// Item(2, "Second Item", "This is the second item description"),
|
// Item(3, "Third Item", "This is the third item description")
|
// )
|
//
|
// val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
|
// recyclerView.layoutManager = LinearLayoutManager(this)
|
// recyclerView.adapter = MyAdapter(items)
|
|
// var codeList = Core.code.getAllDesc()
|
val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
|
recyclerView.layoutManager = LinearLayoutManager(this)
|
// recyclerView.adapter = MyAdapter(codeList)
|
|
// 初始化适配器
|
adapter = MyAdapter()
|
recyclerView.adapter = adapter
|
|
// 观察 LiveData 数据
|
homeViewModel.codeList.observe(this) { codeList ->
|
// 如果 codeList 为 null,避免闪退
|
if (codeList != null) {
|
adapter.submitList(codeList)
|
// 滚动到顶部
|
recyclerView.scrollToPosition(0)
|
} else {
|
// 如果数据为空,可以显示空列表或其他处理
|
Toast.makeText(this, "No data available", Toast.LENGTH_SHORT).show()
|
}
|
}
|
|
// 注册广播接收器来监听数据更新
|
val filter = IntentFilter("com.example.firstapp.DATA_UPDATED")
|
registerReceiver(object : BroadcastReceiver() {
|
override fun onReceive(context: Context, intent: Intent) {
|
// 数据已更新,刷新 LiveData
|
homeViewModel.loadData()
|
}
|
}, filter)
|
|
}
|
|
private fun registerSmsReceiver() {
|
smsReceiver = SmsReceiver()
|
val filter = IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)
|
registerReceiver(smsReceiver, filter)
|
}
|
}
|