what is the use of MemoryFile in android

前端 未结 3 1456
有刺的猬
有刺的猬 2020-12-01 16:51

I want to write some bytes to a shared memory. This is done in my application1. From my another application: application2 I want to access that shared memory to read the wri

3条回答
  •  天命终不由人
    2020-12-01 17:18

    If you want some cross-process use with MemoryFile you can use the following fugly method:

    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);
            }
        }
    }
    

    What you should be looking at is the #getParcelFileDescriptor(MemoryFile) method which you can return from an implementation of ContentProvider#openFile(Uri, String).

提交回复
热议问题