文件上传的逻辑
This commit is contained in:
parent
b27394526c
commit
d1deee482c
|
|
@ -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<FirstActivity> 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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue