在 Web 视图中的 TXT 中加载 URL

2022-09-04 20:51:31

我正在制作一种浏览器应用程序。它就像我想要的那样工作,除了一件事。我必须加载一个位于我的WebView中的URL。将在设备根目录中,用户将能够使用该应用程序对其进行编辑。我该怎么做?.txt.txt.txt

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.abaco.abawser.MainActivity">

    <WebView
        android:id="@+id/web"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

主要活动.java:

package com.abaco.awser;

import android.app.ActionBar;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    WebView web;
    String webURL = "http://www.google.com";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();

        if (savedInstanceState != null)
            ((WebView)findViewById(R.id.web)).restoreState(savedInstanceState);

        web = (WebView) findViewById(R.id.web);
        web.loadUrl(webURL);
        web.setPadding(0, 0, 0, 0);
        web.getSettings().setLoadWithOverviewMode(true);
        web.getSettings().setUseWideViewPort(true);
        web.getSettings().setJavaScriptEnabled(true);

        this.web.setWebViewClient(new WebViewClient(){

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url){
                view.loadUrl(url);
                return true;
            }
        });
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        web.saveState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        web.restoreState(savedInstanceState);
    }

    @Override
    public void onBackPressed() {
    }

}

答案 1

这里有两个不同的问题:

  1. 从.txt文件获取 URL
  2. 在 中加载网址WebView

您应该单独考虑它们。你似乎已经知道如何做2。(将 URL 加载到 ),因此请关注 1。WebView

您可以从许多资源中学习如何在Java中打开和读取文件。包括SO。唯一特定于Android的部分是访问文件。Android 应用程序限制了对大多数存储位置的访问。在用户(未植根)设备上,应用只能访问少数位置:

应用程序存储

每个应用都可以访问自己的存储(在 中)。您可以使用 openFileInput 直接打开这些文件。或者使用 getFilesDir() 获取路径。/data/data/{your.package}

外部存储

如果文件位于你的应用中,则需要该权限,并且你可能必须确保已装载外部存储。点击此处了解详情/sdcardREAD_EXTERNAL_STORAGE

/data/local/tmp

这是大多数Android设备(但不是全部)上所有应用程序都可以“输入”的一个位置,因此,如果您将文件放在那里并确保它是世界可读的(),那么您将能够在任何应用程序中打开它。chmod o+r /data/local/tmp/myfile.txt


答案 2

我要支持@szym的做法。在这里,您可以找到一些代码,以便更好地理解。

File sdcard = Environment.getExternalStorageDirectory();

//Get the text file
File file = new File(sdcard,"file.txt");

//Read text from file
StringBuilder text = new StringBuilder();

try {
    BufferedReader br = new BufferedReader(new FileReader(file));
    String line;

    while ((line = br.readLine()) != null) {
        text.append(line);
    }
    br.close();

String url = "";

String urlRegex = "((https?|ftp|gopher|telnet|file):((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*)";
    Pattern pattern = Pattern.compile(urlRegex, Pattern.CASE_INSENSITIVE);
    Matcher urlMatcher = pattern.matcher(text.toString());

    while (urlMatcher.find())
    {
        url = text.toString().substring(urlMatcher.start(0),
                urlMatcher.end(0));
        break;
    }

    if(""!=url){
         WebView webview = (WebView) findViewById(R.id.webView1);
        webview.setWebViewClient(new WebViewClient());
        webview.getSettings().setJavaScriptEnabled(true);
        webview.loadUrl(url);
    }

}
catch (IOException e) {
    //You'll need to add proper error handling here
}

推荐