2 Commits

@@ -44,18 +44,20 @@ class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
android.util.Log.d("BatteryHealth", "onCreate 开始")
// 🟢 从 SharedPreferences 恢复 URI try {
val prefs: SharedPreferences = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE) val prefs: SharedPreferences = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
val uriString = prefs.getString(KEY_SAF_URI, null) val uriString = prefs.getString(KEY_SAF_URI, null)
if (uriString != null) { android.util.Log.d("BatteryHealth", "SharedPreferences URI: $uriString")
try { if (uriString != null) {
safUri = Uri.parse(uriString) safUri = Uri.parse(uriString)
android.util.Log.d("BatteryHealth", "恢复 SAF URI: $safUri") android.util.Log.d("BatteryHealth", "恢复 SAF URI 成功: $safUri")
} catch (e: Exception) {
android.util.Log.e("BatteryHealth", "恢复 URI 失败: ${e.message}")
} }
} catch (e: Exception) {
android.util.Log.e("BatteryHealth", "恢复 URI 异常: ${e.message}")
} }
android.util.Log.d("BatteryHealth", "onCreate 结束,safUri = $safUri")
} }
private fun saveUri(uri: Uri) { private fun saveUri(uri: Uri) {
@@ -68,6 +70,18 @@ class MainActivity : FlutterActivity() {
} }
} }
private fun restoreUri(uriString: String) {
try {
safUri = Uri.parse(uriString)
android.util.Log.d("BatteryHealth", "通过 MethodChannel 恢复 URI: $safUri")
// 同时保存到 SharedPreferences
val prefs: SharedPreferences = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
prefs.edit().putString(KEY_SAF_URI, uriString).apply()
} catch (e: Exception) {
android.util.Log.e("BatteryHealth", "restoreUri 失败: ${e.message}")
}
}
private fun sendChargeState(isCharging: Boolean) { private fun sendChargeState(isCharging: Boolean) {
val chargeType = if (isCharging) { val chargeType = if (isCharging) {
val batteryIntent = registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED)) val batteryIntent = registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
@@ -125,9 +139,8 @@ class MainActivity : FlutterActivity() {
val takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION val takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
contentResolver.takePersistableUriPermission(uri, takeFlags) contentResolver.takePersistableUriPermission(uri, takeFlags)
safUri = uri safUri = uri
// 🟢 保存到 SharedPreferences
saveUri(uri) saveUri(uri)
android.util.Log.d("BatteryHealth", "SAF URI: $uri") android.util.Log.d("BatteryHealth", "SAF 授权成功 URI: $uri")
safResult?.success(uri.toString()) safResult?.success(uri.toString())
} catch (e: Exception) { } catch (e: Exception) {
android.util.Log.e("BatteryHealth", "SAF 授权失败: ${e.message}") android.util.Log.e("BatteryHealth", "SAF 授权失败: ${e.message}")
@@ -141,15 +154,13 @@ class MainActivity : FlutterActivity() {
} }
private fun getTreeDocId(): String? { private fun getTreeDocId(): String? {
android.util.Log.d("BatteryHealth", "getTreeDocId: safUri = $safUri")
return safUri?.let { DocumentsContract.getTreeDocumentId(it) } return safUri?.let { DocumentsContract.getTreeDocumentId(it) }
} }
private fun listFiles(): List<String> { private fun listFiles(): List<String> {
android.util.Log.d("BatteryHealth", "listFiles 被调用") android.util.Log.d("BatteryHealth", "listFiles 被调用safUri = $safUri")
val result = mutableListOf<String>() val result = mutableListOf<String>()
val docId = getTreeDocId() val docId = getTreeDocId()
android.util.Log.d("BatteryHealth", "docId = $docId")
if (docId == null || docId.isEmpty()) { if (docId == null || docId.isEmpty()) {
android.util.Log.e("BatteryHealth", "docId 为空") android.util.Log.e("BatteryHealth", "docId 为空")
return result return result
@@ -157,18 +168,15 @@ class MainActivity : FlutterActivity() {
try { try {
val childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree(safUri!!, docId) val childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree(safUri!!, docId)
android.util.Log.d("BatteryHealth", "childrenUri = $childrenUri")
contentResolver.query(childrenUri, null, null, null, null)?.use { cursor -> contentResolver.query(childrenUri, null, null, null, null)?.use { cursor ->
val nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME) val nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
val name = cursor.getString(nameIndex) val name = cursor.getString(nameIndex)
if (name != null) { if (name != null) {
android.util.Log.d("BatteryHealth", "找到文件: $name")
result.add(name) result.add(name)
} }
} }
} }
android.util.Log.d("BatteryHealth", "共找到 ${result.size} 个文件")
} catch (e: Exception) { } catch (e: Exception) {
android.util.Log.e("BatteryHealth", "列出文件失败: ${e.message}", e) android.util.Log.e("BatteryHealth", "列出文件失败: ${e.message}", e)
} }
@@ -242,6 +250,15 @@ class MainActivity : FlutterActivity() {
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, SAF_CHANNEL) MethodChannel(flutterEngine.dartExecutor.binaryMessenger, SAF_CHANNEL)
.setMethodCallHandler { call, result -> .setMethodCallHandler { call, result ->
when (call.method) { when (call.method) {
"restoreUri" -> {
val uriString = call.argument<String>("uri")
if (uriString != null) {
restoreUri(uriString)
result.success(true)
} else {
result.error("INVALID_ARGUMENT", "uri is required", null)
}
}
"selectFolder" -> { "selectFolder" -> {
safResult = result safResult = result
openFolderPicker() openFolderPicker()