diff --git a/android/app/src/main/java/games/wenzi/ogame/MainActivity.java b/android/app/src/main/java/games/wenzi/ogame/MainActivity.java index a859ce5..bb7e293 100644 --- a/android/app/src/main/java/games/wenzi/ogame/MainActivity.java +++ b/android/app/src/main/java/games/wenzi/ogame/MainActivity.java @@ -8,9 +8,12 @@ import android.os.Bundle; import android.view.View; import android.view.Window; import android.view.animation.AccelerateDecelerateInterpolator; +import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; +import android.net.Uri; +import android.content.Intent; import androidx.core.splashscreen.SplashScreen; import androidx.core.view.WindowCompat; import androidx.core.view.WindowInsetsControllerCompat; @@ -18,6 +21,8 @@ import com.getcapacitor.BridgeActivity; public class MainActivity extends BridgeActivity { private boolean isWebViewReady = false; + private static final int FILE_CHOOSER_REQUEST_CODE = 1001; + private ValueCallback filePathCallback; @Override protected void onCreate(Bundle savedInstanceState) { @@ -94,7 +99,50 @@ public class MainActivity extends BridgeActivity { isWebViewReady = true; } } + + @Override + public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, + FileChooserParams fileChooserParams) { + // 清理之前的回调 + if (MainActivity.this.filePathCallback != null) { + MainActivity.this.filePathCallback.onReceiveValue(null); + } + + MainActivity.this.filePathCallback = filePathCallback; + + // 创建文件选择器 Intent + Intent intent = fileChooserParams.createIntent(); + try { + startActivityForResult(intent, FILE_CHOOSER_REQUEST_CODE); + } catch (android.content.ActivityNotFoundException e) { + MainActivity.this.filePathCallback = null; + return false; + } + return true; + } }); } } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == FILE_CHOOSER_REQUEST_CODE) { + if (filePathCallback == null) { + return; + } + + Uri[] results = null; + if (resultCode == RESULT_OK && data != null) { + String dataString = data.getDataString(); + if (dataString != null) { + results = new Uri[]{Uri.parse(dataString)}; + } + } + + filePathCallback.onReceiveValue(results); + filePathCallback = null; + } + } } diff --git a/package.json b/package.json index 4bb76e4..05111b4 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ }, "private": true, "version": "1.6.5", - "buildDate": "2026/1/23 01:10:25", + "buildDate": "2026/1/23 02:22:24", "main": "dist-electron/main.js", "type": "module", "scripts": { diff --git a/src/views/SettingsView.vue b/src/views/SettingsView.vue index e216bf1..4efbfee 100644 --- a/src/views/SettingsView.vue +++ b/src/views/SettingsView.vue @@ -30,7 +30,7 @@

{{ t('settings.importDataDesc') }}

- +