我想将一些字节写入共享内存。这是在我的应用程序中完成的。从我的另一个应用程序: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)
的实现中返回该方法。