Intereting Posts
Невозможно выполнить проверку экземпляра с параметризованным типом ArrayList <Foo> Как изменить размер изображения на Android? EditText maxLines не работает – пользователь может все еще вводить больше строк, чем установлено Как создать EditText с помощью кнопки cross (x) в конце? Android SDK требует инструментария разработчика Android версии 17.0.0 или выше Онлайн-приложение для потокового радио для Android Цвет текста в ListView Android Есть ли способ получить фрагмент сверху стека? Идеи источника QualcommCameraHardware native_get_picture: MSM_CAM_IOCTL_GET_PICTURE Ошибка времени ожидания подключения? Как обращаться с кнопкой возврата в действии Пробейте отверстие в наложении прямоугольника с ускорением HW, включенным в представлении Как правильно использовать и отслеживать приложения? Android AlertDialog с динамически изменяющимся текстом по каждому запросу Отладка базы данных sqlite на устройстве Исключение, возникающее при рендеринге: java.lang.System.arraycopy

Загрузка URL-адреса внутри TXT в Webview

Я делаю своеобразное приложение для браузера. Он работает так, как я хочу, кроме одного. Мне нужно загрузить URL-адрес, который находится внутри .txt в моем WebView. .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() { } } 

Solutions Collecting From Web of "Загрузка URL-адреса внутри TXT в Webview"

Здесь есть две отдельные проблемы:

  1. Получение URL-адреса из файла .txt
  2. Загрузка URL-адреса в WebView

Вы должны думать о них отдельно. Вы уже знаете, как это сделать 2. (загрузите URL-адрес в WebView ), поэтому сосредоточьтесь на 1.

Вы можете узнать, как открывать и читать файл на Java из многих ресурсов. Включая SO . Единственная специальная часть Android – это доступ к файлу. Приложения Android имеют ограниченный доступ к большинству мест хранения. На пользовательских (не укоренившихся) устройствах приложения имеют доступ только к нескольким местоположениям:

Хранение приложений

Каждое приложение может получить доступ к собственному хранилищу (в /data/data/{your.package} ). Вы можете открыть эти файлы напрямую, используя openFileInput . Или получите путь, используя getFilesDir() .

Внешнее хранилище

Если файл находится в /sdcard вашему приложению потребуется разрешение READ_EXTERNAL_STORAGE и вам, возможно, потребуется READ_EXTERNAL_STORAGE внешнее хранилище. Подробнее здесь .

/data/local/tmp

Это одно место на большинстве Android-устройств (но не для всех ), которые все приложения могут «вводить», поэтому, если вы поместите туда файл и убедитесь, что он chmod o+r /data/local/tmp/myfile.txt чтения в мире ( chmod o+r /data/local/tmp/myfile.txt ), То вы сможете открыть его в любом приложении.

Я хотел бы поддержать подход @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 }