文件上传的逻辑
This commit is contained in:
parent
b27394526c
commit
d1deee482c
|
|
@ -24,6 +24,11 @@ import android.widget.Toast;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.RequiresApi;
|
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.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
|
@ -275,6 +280,7 @@ public class FirstActivity extends BaseActivity {
|
||||||
|
|
||||||
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
|
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
|
||||||
if (dm != null) {
|
if (dm != null) {
|
||||||
|
Toast.makeText(this, "文件已开始下载,请等待", Toast.LENGTH_SHORT).show();
|
||||||
currentDownloadId = dm.enqueue(request);
|
currentDownloadId = dm.enqueue(request);
|
||||||
startDownloadProgressMonitor(dm, currentDownloadId);
|
startDownloadProgressMonitor(dm, currentDownloadId);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -298,7 +304,6 @@ public class FirstActivity extends BaseActivity {
|
||||||
|
|
||||||
while (downloading) {
|
while (downloading) {
|
||||||
try {
|
try {
|
||||||
Toast.makeText(this, "文件已开始下载,请等待", Toast.LENGTH_SHORT).show();
|
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
android.database.Cursor cursor = dm.query(query);
|
android.database.Cursor cursor = dm.query(query);
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
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 {
|
public static class JsBridge {
|
||||||
private final WeakReference<FirstActivity> activityRef;
|
private final WeakReference<FirstActivity> activityRef;
|
||||||
|
|
||||||
|
|
@ -369,6 +439,14 @@ public class FirstActivity extends BaseActivity {
|
||||||
activity.runOnUiThread(() -> activity.downloadFile(url));
|
activity.runOnUiThread(() -> activity.downloadFile(url));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// ✅ 供前端调用的文件选择方法
|
||||||
|
@JavascriptInterface
|
||||||
|
public void chooseFile() {
|
||||||
|
FirstActivity activity = activityRef.get();
|
||||||
|
if (activity != null) {
|
||||||
|
activity.runOnUiThread(activity::chooseFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@JavascriptInterface
|
@JavascriptInterface
|
||||||
public void showLog(String message) {
|
public void showLog(String message) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue