Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cuál es el uso de MemoryFile en android

Quiero escribir algunos bytes en una memoria compartida. Esto se hace en mi aplicación1. Desde mi otra aplicación: application2 Quiero acceder a esa memoria compartida para leer los bytes escritos. Para este propósito he intentado usar la clase MemoryFile de android. Estoy atascado como la forma de referirse a la misma memoria de fragmentos entre dos aplicaciones diferentes. Ahora también estoy confundido si memoryFile se utiliza para el mismo propósito o no. Http://developer.android.com/reference/android/os/MemoryFile.html este enlace que encontré con respecto al tema. Gracias por adelantado. Krishna

  • Android NDK - OpenGL ES Tutorial / Bibliotecas
  • Cómo encajar la imagen en ImageView con Glide
  • Android: Campos estáticos y fugas de memoria
  • Vista previa de Android Studio 3.0 Falta las importaciones al refactorizar el código de Kotlin
  • Valor de búsqueda de la clave en array-array android
  • Cómo enviar solicitud http en la aplicación android para acceder a REST API
  • Android: Nivel de API VS. versión de Android
  • Android / Java: Guardar una matriz de bytes en un archivo (.jpeg)
  • FragmentManager reemplazar vs Añadir
  • Cómo analizar un flujo de entrada JSON
  • ¿Rotar imágenes alrededor de un círculo?
  • Los dispositivos Samsung no cierran el cajón de la aplicación después de CLOSE_SYSTEM_DIALOGS
  • 3 Solutions collect form web for “¿Cuál es el uso de MemoryFile en android”

    Si desea utilizar algunos procesos MemoryFile con MemoryFile puede utilizar el siguiente método fugly :

     import android.os.MemoryFile; import android.os.ParcelFileDescriptor; import java.io.FileDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class MemoryFileUtil { private static final Method sMethodGetParcelFileDescriptor; private static final Method sMethodGetFileDescriptor; static { sMethodGetParcelFileDescriptor = get("getParcelFileDescriptor"); sMethodGetFileDescriptor = get("getFileDescriptor"); } public static ParcelFileDescriptor getParcelFileDescriptor(MemoryFile file) { try { return (ParcelFileDescriptor) sMethodGetParcelFileDescriptor.invoke(file); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } } public static FileDescriptor getFileDescriptor(MemoryFile file) { try { return (FileDescriptor) sMethodGetFileDescriptor.invoke(file); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } } private static Method get(String name) { try { return MemoryFile.class.getDeclaredMethod(name); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } } } 

    Lo que debería buscar es el #getParcelFileDescriptor(MemoryFile) que puede devolver desde una implementación de ContentProvider#openFile(Uri, String) .

    Sospecho que los archivos de memoria no tienen el método getParcelFileDescriptor. Cuando comenté este método relacionado con getParcelFileDescriptor y uso getFileDescriptor. Funcionó muy bien.

     import java.io.FileDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.os.MemoryFile; /** * Invoke hidden methods using reflection * */ public class MemoryFileUtil { private static final Method sMethodGetFileDescriptor; static { sMethodGetFileDescriptor = get("getFileDescriptor"); } public static FileDescriptor getFileDescriptor(MemoryFile file) { try { return (FileDescriptor) sMethodGetFileDescriptor.invoke(file); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } } private static Method get(String name) { try { return MemoryFile.class.getDeclaredMethod(name); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } } } 

    Y el descriptor de archivo creado del archivo de la memoria.

     FileDescriptor fd = MemoryFileUtil.getFileDescriptor(memFile); 

    MemoryFile se puede utilizar para asignar a la memoria física. El descriptor de archivo de resultados (fd) se puede pasar al cliente (lado de intercambio de memoria). El cliente puede asignar el mismo fd nativo a la misma región de memoria. La memoria puede entonces ser compartida usando el fd nativo, que se puede asignar a la capa de java usando InputStream.

    Consulte este enlace para obtener más detalles:
    Compartir la memoria usando ashem.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.