Cargando una URL dentro de un TXT en una vista Web
Estoy haciendo una especie de aplicación de navegador. Está funcionando como quiero, excepto por una cosa. Tengo que cargar una URL que está dentro de un .txt
en mi WebView. El .txt
estará en el directorio raíz del dispositivo y el usuario podrá editar este .txt
utilizando la aplicación. ¿Cómo puedo hacerlo?
Activity_main.xml:
- Ayuda para obtener String Array desde el archivo arrays.xml
- R.id no se puede resolver
- (Java LibGDX) ¿Cómo puedo cambiar el tamaño de mis texturas en LibGDX?
- Android: Bitmap a Byte Array y espalda: SkImageDecoder :: Factory devuelto null
- Combinación de celdas en Excel mediante Apache POI
<?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() { } }
- ¿Por qué mi editText no presenta la salida correcta en android?
- Clase genérica que extiende la clase e implementa la interfaz
- Botón de acción flotante Desplazamiento comportamiento extraño
- Eliminando un elemento de String array en android
- Cómo borrar distinct_id en mixpanel android cuando el usuario se desconecta?
- Intención de inicio para actividad-alias
- Tamaño del montón de Android VM
- Comprobar si la aplicación está abierta durante un evento de GCM onMessage?
Aquí hay dos preocupaciones separadas :
- Obtener una URL desde el archivo .txt
- Cargando una URL en
WebView
Usted debe pensar en ellos por separado. Ya pareces saber cómo hacer 2. (cargar una URL en WebView
), así que enfócate en 1.
Puede aprender a abrir y leer un archivo en Java desde muchos recursos. Incluyendo SO . La única parte específica de Android es acceder al archivo. Las aplicaciones de Android tienen acceso restringido a la mayoría de las ubicaciones de almacenamiento. En los dispositivos de usuario (no enraizados), las aplicaciones tienen acceso a sólo unos pocos lugares:
Almacenamiento de aplicaciones
Cada aplicación puede acceder al almacenamiento propio (en /data/data/{your.package}
). Puede abrir estos archivos directamente con openFileInput
. O obtener la ruta utilizando getFilesDir()
.
Almacenamiento externo
Si el archivo está en /sdcard
su aplicación necesitará el permiso READ_EXTERNAL_STORAGE
y es posible que tenga que asegurarse de que el almacenamiento externo esté montado. Más información aquí .
/data/local/tmp
Esta es una ubicación en la mayoría de los dispositivos Android (pero no todos ) que todas las aplicaciones pueden "entrar", por lo que si coloca el archivo allí y asegúrese de que es legible en el mundo ( chmod o+r /data/local/tmp/myfile.txt
), Entonces podrás abrirlo en cualquier aplicación.
Me gustaría apoyar el enfoque de @szym. Aquí puede encontrar algún código para su mejor comprensión.
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 }
- Error Building Project en Android Studio "Error: No se encontró ningún recurso que coincida con el nombre dado (en ____ con valor '@ drawable / <name>')
- ¿Cómo detener el emulador de Android?