【发布时间】:2020-11-26 00:16:40
【问题描述】:
我对 Android 非常陌生,刚刚在 Android Studio(Java 平台)中为 Android 7 及更高版本开发了一个 WebView 应用程序。 WebView 正在访问一个 HTML 页面,该页面使用 JavaScript 动态生成字符串。我可以使用这篇文章中的说明将字符串从 HTML 页面提供给 WebView:Download file generated by javascript in android webview
我想将字符串保存在文本文件中。我尝试了几个解决方案,但没有任何效果。如果有人可以提供一些代码来将字符串保存在 .txt 文件中,那将非常有帮助。我还需要有关如何实现访问存储的检查/请求权限的说明(保存文件可能需要)。
我尝试实施以下“glzlaohuai”的建议。下面是我的 MainActivity.java
package com.example.brahma;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class MainActivity extends AppCompatActivity {
private Context mContext;
private Activity mActivity;
private static final int MY_PERMISSION_REQUEST_CODE = 123;
WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
web = findViewById(R.id.brahma_wv);
WebSettings webSettings = web.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setSupportZoom(true);
webSettings.setAllowFileAccess(true);
webSettings.supportMultipleWindows();
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setDisplayZoomControls(false);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
web.setWebViewClient(new Callback());
web.loadUrl("https://script.google.com/macros/s/myWebAppId/exec");
web.addJavascriptInterface(new myJavascriptInterface(this), "Android");
}
public class myJavascriptInterface {
Context mContext;
myJavascriptInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void sendData(String attString) {
File file = new File(getExternalFilesDir(null), "Testfile.txt");
try {
OutputStream fileWriter = new FileOutputStream(file);
Log.d("ATT", attString);
fileWriter.write(attString.getBytes());
fileWriter.close();
} catch (IOException e) {
Log.w("ExternalStorage", "Error writing " + file, e);
}
}
}
}
代码运行,我在日志中获得了所需的字符串,但没有保存或下载文件。我也没有看到任何错误。
以下是按预期工作的修改后的代码。
public class myJavascriptInterface {
Context mContext;
myJavascriptInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void sendData(String attString) {
Log.d("Txt", attString.toString());
//save attString as file
String filename = "TestFile.txt";
saveTextAsFile(filename, attString);
}
}
private void saveTextAsFile(String filename, String content) {
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), filename);
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(content.getBytes());
fos.close();
Toast.makeText(this, "Saved!", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
【问题讨论】:
标签: android android-studio android-webview