更新已知问题

This commit is contained in:
李志强 2026-03-26 22:12:23 +08:00
parent 7eb8c3a5ad
commit cc46a40896
8 changed files with 45 additions and 1 deletions

View File

@ -4,7 +4,7 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-03-26T12:09:09.946169900Z">
<DropdownSelection timestamp="2026-03-26T14:07:43.913102200Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=lvzdxotknne6u4nv" />

Binary file not shown.

View File

@ -22,6 +22,16 @@
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- 为 ROLE_SMS 申请准备:声明自己是可处理短信的应用 -->
<intent-filter>
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</activity>
<!-- 接收系统短信广播 -->

View File

@ -1,6 +1,7 @@
package com.yunzer.sms
import android.Manifest
import android.app.role.RoleManager
import android.content.Intent
import android.content.IntentFilter
import android.content.pm.PackageManager
@ -25,6 +26,7 @@ class MainActivity : ComponentActivity() {
private lateinit var btnSave: Button
private lateinit var etTestPhone: EditText
private lateinit var btnSmsTest: Button
private lateinit var btnRequestSmsRole: Button
private lateinit var btnClearLog: Button
private lateinit var tvStatus: TextView
private lateinit var tvLog: TextView
@ -42,6 +44,12 @@ class MainActivity : ComponentActivity() {
private val configStore by lazy { ConfigStore(this) }
private val smsRoleLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
// 角色授权结束后,再尝试启动网关
maybeStartGateway()
}
private val permissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
// 权限申请后可能有两类后续动作:
@ -69,6 +77,7 @@ class MainActivity : ComponentActivity() {
btnSave = findViewById(R.id.btnSave)
etTestPhone = findViewById(R.id.etTestPhone)
btnSmsTest = findViewById(R.id.btnSmsTest)
btnRequestSmsRole = findViewById(R.id.btnRequestSmsRole)
btnClearLog = findViewById(R.id.btnClearLog)
tvStatus = findViewById(R.id.tvStatus)
tvLog = findViewById(R.id.tvLog)
@ -126,6 +135,22 @@ class MainActivity : ComponentActivity() {
sendTestSms(phone)
}
btnRequestSmsRole.setOnClickListener {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
Toast.makeText(this, "当前系统版本不需要 ROLE_SMS", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
try {
val roleManager = getSystemService(RoleManager::class.java) ?: return@setOnClickListener
SmsGatewayLogger.post(this, "INFO", "用户点击:申请 ROLE_SMS")
val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS)
smsRoleLauncher.launch(intent)
} catch (e: Exception) {
Toast.makeText(this, "申请 ROLE_SMS 失败:${e.message}", Toast.LENGTH_LONG).show()
}
}
btnClearLog.setOnClickListener {
tvLog.text = ""
SmsGatewayLogger.post(this, "INFO", "日志已清空")

View File

@ -49,6 +49,13 @@
android:text="@string/sms_test"
android:layout_marginTop="8dp" />
<Button
android:id="@+id/btnRequestSmsRole"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/request_sms_role"
android:layout_marginTop="8dp" />
<Button
android:id="@+id/btnClearLog"
android:layout_width="match_parent"

View File

@ -15,6 +15,8 @@
<string name="sms_test_success">短信测试发送成功</string>
<string name="sms_test_failed">短信测试发送失败</string>
<string name="request_sms_role">申请默认短信权限ROLE_SMS</string>
<string name="permission_tip">请授予短信接收/发送权限</string>
<string name="config_saved">配置已保存并启动网关</string>
<string name="config_invalid">请填写后端地址、ApiKey</string>