我正在制作一种浏览器应用程序。就像我想要的一样工作,除了一件事。我必须在WebView中加载.txt内的URL。 .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>

MainActivity.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() {
    }

}

最佳答案

这里有两个单独的问题:

  • 从.txt文件中获取URL
  • WebView中加载URL

  • 您应该分开考虑它们。您似乎已经知道该怎么做2。(将URL加载到WebView中),因此请专注于1。

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

    应用程序存储

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

    外置储存

    如果文件的格式为/sdcard,则您的应用将需要READ_EXTERNAL_STORAGE权限,并且您可能必须确保已安装外部存储。 Learn more here
    /data/local/tmp
    这是大多数Android设备上的一个位置(但并非全部),所有应用程序都可以“输入”该位置,因此,如果将文件放在该位置并确保其可全局读取(chmod o+r /data/local/tmp/myfile.txt),则可以在任何位置打开它应用程序。

    09-09 21:45
    查看更多