我正在制作一种浏览器应用程序。就像我想要的一样工作,除了一件事。我必须在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() {
}
}
最佳答案
这里有两个单独的问题:
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
),则可以在任何位置打开它应用程序。