¿Cómo obtener URI de un archivo de activos?
He estado tratando de obtener la ruta URI para un archivo de activos.
uri = Uri.fromFile(new File("//assets/mydemo.txt"));
Cuando compruebo si el archivo existe veo que el archivo no existe
- Texto con formas en recurso dibujable
- Eliminación automática de cadenas no referenciadas de strings.xml
- Android: referencia a recursos en xml personalizado
- Recursos de Android que convierten a string Warning TypedValue
- Android: ¿Cómo organizar los recursos del proyecto?
File f = new File(filepath); if (f.exists() == true) { Log.e(TAG, "Valid :" + filepath); } else { Log.e(TAG, "InValid :" + filepath); }
¿Puede alguien decirme cómo puedo mencionar la ruta absoluta para un archivo existente en la carpeta de activos
- Calabash Android: Error de ruta de acceso al intentar ejecutar una prueba en un APK
- Múltiples iconos en Honeycomb
- Tamaños de imagen de Android
- Localización y travesaños
- Ningún paquete conocido al obtener valor para el número de recurso
- ¿Por qué Android está buscando los recursos QVGA en el orden incorrecto mdpi> hdpi> ldpi?
- Androide. Obtener el tamaño de la imagen desde su id de recurso
- Android: El proceso ha muerto - bajos recursos?
No hay "ruta absoluta para un archivo existente en la carpeta de activos". El contenido de los assets/
carpeta del proyecto se empaquetan en el archivo APK. Utilice un objeto AssetManager
para obtener un InputStream
en un recurso.
EDITAR
Para reparar uno de mis comentarios a continuación, la sintaxis de URL para los recursos es file:///android_asset/...
(nota: tres barras).
La url correcta es:
file:///android_asset/RELATIVEPATH
Donde RELATIVEPATH es la ruta de acceso a su recurso en relación con la carpeta de activos.
Observe los 3 / 's en el esquema. La vista Web no cargaría ninguno de mis activos sin 3. He intentado 2 como (previamente) comentado por CommonsWare y no funcionaría. Entonces miré la fuente de CommonsWare en github y noté la barra inclinada extra.
Esta prueba, aunque sólo se hizo en el emulador de 1.6 Android, pero dudo que sea diferente en un dispositivo real o una versión superior.
EDIT: CommonsWare actualizó su respuesta para reflejar este pequeño cambio. Así que he editado esto por lo que todavía tiene sentido con su respuesta actual.
Funciona para WebView pero parece fallar en URL.openStream()
. Así que necesitas distinguir los protocolos file: // y manejarlos a través de AssetManager como se sugiere.
Pruebe esto: funciona
InputStream in_s = getClass().getClassLoader().getResourceAsStream("TopBrands.xml");
Si tiene una excepción de valor nulo, pruebe esta:
InputStream in_s1 = TopBrandData.class.getResourceAsStream("/assets/TopBrands.xml");
TopBranData es una clase
Asegúrese de que su carpeta de activos esté en la posición correcta.
InputStream is = getResources().getAssets().open("terms.txt"); String textfile = convertStreamToString(is); public static String convertStreamToString(InputStream is) throws IOException { Writer writer = new StringWriter(); char[] buffer = new char[2048]; try { Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); int n; while ((n = reader.read(buffer)) != -1) { writer.write(buffer, 0, n); } } finally { is.close(); } String text = writer.toString(); return text;
Sí, usted no puede acceder a su carpeta de la unidad de su teléfono o emulador de Android, ya que su equipo y Android son dos diferentes OS.I iría para la carpeta res de Android, ya que tiene buenos métodos de gestión de recursos. Hasta ya menos que tenga muy buenas razones para ponerle archivo en la carpeta de activos. En su lugar puede hacer esto
try { Resources res = getResources(); InputStream in_s = res.openRawResource(R.raw.yourfile); byte[] b = new byte[in_s.available()]; in_s.read(b); String str = new String(b); } catch (Exception e) { Log.e(LOG_TAG, "File Reading Error", e); }
Prueba este código funcionando bien
Uri imageUri = Uri.fromFile(new File("//android_asset/luc.jpeg")); /* 2) Create a new Intent */ Intent imageEditorIntent = new AdobeImageIntent.Builder(this) .setData(imageUri) .build();
Trabajó para mí Pruebe este código
uri = Uri.fromFile(new File("//assets/testdemo.txt")); File f = new File(testfilepath); if (f.exists() == true) { Toast.makeText(getApplicationContext(),"valid :" + testfilepath, 2000).show(); } else { Toast.makeText(getApplicationContext(),"invalid :" + testfilepath, 2000).show(); }
prueba esto :
Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.cat);
Lo hice y funcionó
- Android: comparte texto sin formato con la intención (para todas las aplicaciones de mensajería)
- Instalar aplicaciones en silencio, con el permiso INSTALL_PACKAGES concedido