Compare commits
2 Commits
7ba2e612f1
...
055b9aecce
| Author | SHA1 | Date | |
|---|---|---|---|
| 055b9aecce | |||
| 8e93cbeed2 |
@@ -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)
|
||||||
|
android.util.Log.d("BatteryHealth", "SharedPreferences URI: $uriString")
|
||||||
if (uriString != null) {
|
if (uriString != null) {
|
||||||
try {
|
|
||||||
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) {
|
} catch (e: Exception) {
|
||||||
android.util.Log.e("BatteryHealth", "恢复 URI 失败: ${e.message}")
|
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user