我想将一些字节写入共享内存。这是在我的应用程序中完成的。从我的另一个应用程序:application2我想访问该共享内存以读取写入的字节。为此,我尝试使用android的MemoryFile类。我被困为如何在两个不同的应用程序之间引用相同的分片内存。现在,如果将memoryFile用于相同目的,我也感到困惑。
http://developer.android.com/reference/android/os/MemoryFile.html我找到的关于该主题的链接。
提前致谢。
克里希纳

最佳答案

如果要对MemoryFile进行跨进程使用,则可以使用以下笨拙的方法:

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

您应该查看的是#getParcelFileDescriptor(MemoryFile)方法,您可以从ContentProvider#openFile(Uri, String)的实现中返回该方法。

07-24 14:26