| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // 通知权限请求 |
| | | private val notificationPermissionRequest = |
| | | private val notificationPermissionRequest = |
| | | registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -> |
| | | if (isGranted) { |
| | | // 权限已授予 |
| | |
| | | |
| | | // 重置提醒计划并检查是否有错过的提醒 |
| | | resetReminders() |
| | | |
| | | |
| | | // 开始权限请求流程 |
| | | startPermissionsFlow() |
| | | } |
| | | |
| | | override fun onResume() { |
| | | super.onResume() |
| | | |
| | | |
| | | // 每次恢复活动时检查短信权限 |
| | | checkAndHandleSmsPermissions(showDialog = false) |
| | | } |
| | | |
| | | |
| | | // 权限请求主流程 |
| | | private fun startPermissionsFlow() { |
| | | // 先请求通知权限,再请求短信权限 |
| | | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { |
| | | // Android 13+ 需要通知权限 |
| | | if (ContextCompat.checkSelfPermission( |
| | | this, |
| | | this, |
| | | Manifest.permission.POST_NOTIFICATIONS |
| | | ) != PackageManager.PERMISSION_GRANTED |
| | | ) { |
| | |
| | | requestSmsPermissions() |
| | | } |
| | | } |
| | | |
| | | |
| | | // 请求短信权限 |
| | | private fun requestSmsPermissions() { |
| | | if (!hasSmsPermissions()) { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // 检查并处理短信权限(可选是否显示对话框) |
| | | private fun checkAndHandleSmsPermissions(showDialog: Boolean = true) { |
| | | if (!hasSmsPermissions()) { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // 检查是否有短信权限 |
| | | private fun hasSmsPermissions(): Boolean { |
| | | return ContextCompat.checkSelfPermission( |
| | | this, Manifest.permission.RECEIVE_SMS |
| | | ) == PackageManager.PERMISSION_GRANTED && |
| | | ContextCompat.checkSelfPermission( |
| | | this, Manifest.permission.READ_SMS |
| | | ) == PackageManager.PERMISSION_GRANTED |
| | | ) == PackageManager.PERMISSION_GRANTED && |
| | | ContextCompat.checkSelfPermission( |
| | | this, Manifest.permission.READ_SMS |
| | | ) == PackageManager.PERMISSION_GRANTED |
| | | } |
| | | |
| | | |
| | | // 显示短信权限解释对话框 |
| | | private fun showSmsPermissionExplanationDialog() { |
| | | AlertDialog.Builder(this) |
| | |
| | | .setCancelable(false) |
| | | .show() |
| | | } |
| | | |
| | | |
| | | // 提供给外部调用的请求通知权限方法 |
| | | fun requestNotificationPermission() { |
| | | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { |
| | | // 判断是否已经有通知权限 |
| | | if (ContextCompat.checkSelfPermission( |
| | | this, |
| | | this, |
| | | Manifest.permission.POST_NOTIFICATIONS |
| | | ) != PackageManager.PERMISSION_GRANTED |
| | | ) { |
| | |
| | | private fun registerSmsReceiver() { |
| | | // 确保不重复注册 |
| | | if (smsReceiver != null) return |
| | | |
| | | |
| | | Log.d("SMS_DEBUG", "MainActivity注册短信接收器") |
| | | smsReceiver = SmsReceiver() |
| | | val filter = IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION) |
| | |
| | | company = response.data.details.company, |
| | | pickupCode = response.data.details.pickupCode, |
| | | address = response.data.details.address, |
| | | time = response.data.details.time, |
| | | smsTimestamp = datetime // 添加短信时间戳 |
| | | time = response.data.details.time |
| | | ) |
| | | CodeUtils.saveCode(code) |
| | | } |
| | |
| | | date = response.data.details.date, |
| | | address = response.data.details.address, |
| | | minAmount = response.data.details.min_amount, |
| | | number = response.data.details.number, |
| | | smsTimestamp = datetime // 添加短信时间戳 |
| | | number = response.data.details.number |
| | | ) |
| | | CodeUtils.saveCode(code) |
| | | } |
| | |
| | | amount = response.data.details.amount, |
| | | datetime = response.data.details.datetime, |
| | | address = response.data.details.address, |
| | | balance = response.data.details.balance, |
| | | smsTimestamp = datetime // 添加短信时间戳 |
| | | balance = response.data.details.balance |
| | | ) |
| | | CodeUtils.saveCode(code) |
| | | } |
| | |
| | | end = response.data.details.end, |
| | | seat = response.data.details.seat, |
| | | time = response.data.details.time, |
| | | address = response.data.details.address, |
| | | smsTimestamp = datetime // 添加短信时间戳 |
| | | address = response.data.details.address |
| | | ) |
| | | CodeUtils.saveCode(code) |
| | | } |
| | |
| | | seat = response.data.details.seat, |
| | | time = response.data.details.time, |
| | | address = response.data.details.address, |
| | | trips = response.data.details.trips, |
| | | smsTimestamp = datetime // 添加短信时间戳 |
| | | trips = response.data.details.trips |
| | | ) |
| | | CodeUtils.saveCode(code) |
| | | } |