diff --git a/app/src/main/java/com/pxkj/jwzs/FirstActivity.java b/app/src/main/java/com/pxkj/jwzs/FirstActivity.java index 9170eb6..12b1cb2 100644 --- a/app/src/main/java/com/pxkj/jwzs/FirstActivity.java +++ b/app/src/main/java/com/pxkj/jwzs/FirstActivity.java @@ -24,6 +24,11 @@ import android.widget.Toast; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; +import android.app.Activity; +import android.content.Intent; // ← 文件选择核心类 +import android.database.Cursor; // ← 解析文件信息 +import android.provider.OpenableColumns; // ← 获取文件名、大小 + import java.io.IOException; import java.io.InputStream; import java.lang.ref.WeakReference; @@ -275,6 +280,7 @@ public class FirstActivity extends BaseActivity { DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); if (dm != null) { + Toast.makeText(this, "文件已开始下载,请等待", Toast.LENGTH_SHORT).show(); currentDownloadId = dm.enqueue(request); startDownloadProgressMonitor(dm, currentDownloadId); } else { @@ -298,7 +304,6 @@ public class FirstActivity extends BaseActivity { while (downloading) { try { - Toast.makeText(this, "文件已开始下载,请等待", Toast.LENGTH_SHORT).show(); Thread.sleep(1000); android.database.Cursor cursor = dm.query(query); if (cursor != null && cursor.moveToFirst()) { @@ -337,6 +342,71 @@ public class FirstActivity extends BaseActivity { } } + // 在 FirstActivity.java 中添加以下代码 + + private static final int REQUEST_CODE_FILE_PICK = 2001; + private Uri selectedFileUri; + + private void chooseFile() { + runOnUiThread(() -> { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setType("*/*"); // 所有类型 + intent.addCategory(Intent.CATEGORY_OPENABLE); + startActivityForResult(Intent.createChooser(intent, "请选择文件"), REQUEST_CODE_FILE_PICK); + }); + } + + /** + * 选择文件后的回调 + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == REQUEST_CODE_FILE_PICK && resultCode == RESULT_OK && data != null) { + selectedFileUri = data.getData(); + if (selectedFileUri != null) { + String fileName = getFileNameFromUri(selectedFileUri); + String filePath = selectedFileUri.toString(); + + // 将选择的文件信息传回前端 JS + if (webView != null) { + String jsCode = String.format( + "if(window.onFileChosen){window.onFileChosen('%s','%s');}", + fileName.replace("'", "\\'"), + filePath.replace("'", "\\'") + ); + webView.evaluateJavascript(jsCode, null); + } + + Toast.makeText(this, "已选择文件: " + fileName, Toast.LENGTH_SHORT).show(); + } + } + } + + /** + * 从 Uri 中获取文件名 + */ + private String getFileNameFromUri(Uri uri) { + String result = null; + if ("content".equals(uri.getScheme())) { + try (android.database.Cursor cursor = getContentResolver().query(uri, null, null, null, null)) { + if (cursor != null && cursor.moveToFirst()) { + result = cursor.getString(cursor.getColumnIndex(android.provider.OpenableColumns.DISPLAY_NAME)); + } + } + } + if (result == null) { + result = uri.getPath(); + int cut = result.lastIndexOf('/'); + if (cut != -1) { + result = result.substring(cut + 1); + } + } + return result; + } + + + public static class JsBridge { private final WeakReference activityRef; @@ -369,6 +439,14 @@ public class FirstActivity extends BaseActivity { activity.runOnUiThread(() -> activity.downloadFile(url)); } } + // ✅ 供前端调用的文件选择方法 + @JavascriptInterface + public void chooseFile() { + FirstActivity activity = activityRef.get(); + if (activity != null) { + activity.runOnUiThread(activity::chooseFile); + } + } @JavascriptInterface public void showLog(String message) {