我正在編寫一個Android應用程序,用於管理文件並與其他應用程序共享它們。該應用實現了手了ParcelFileDescriptor
對象請求應用程序(就像內置的電子郵件應用程序和K-9郵件的應用程序做的)內容提供商:Android中的持久文件描述符
public ParcelFileDescriptor openFile(Uri uri, String mode)
throws FileNotFoundException {
File file;
...
file = new File(FilePermsActivity.FILE_ROOT, fileName);
ParcelFileDescriptor fd;
fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
// store the file descriptor for later
String callerPackage = getAppNameByPID(getContext(), Binder.getCallingPid());
FilesApplication.getInstance().addFd(callerPackage, fd);
return fd;
}
我想允許文件管理器來關閉文件描述符稍後阻止兩個應用程序一次保持打開讀取+寫入文件描述符。該FilesApplication
類這樣做,儲存以備後用ParcelFileDescriptor
對象:
public void addFd(String packageName, ParcelFileDescriptor fd) {
List<ParcelFileDescriptor> fds = null;
if (openFds.containsKey(packageName))
{
fds = openFds.get(packageName);
fds.add(fd);
}
else
{
fds = new ArrayList<ParcelFileDescriptor>();
fds.add(fd);
openFds.put(packageName, fds);
}
}
public List<ParcelFileDescriptor> getFds (String packageName) {
return openFds.get(packageName);
}
的問題是,當我嘗試檢索使用getFds
開放ParcelFileDescriptor
S,文件描述符總是無效。從檢查中,收件人應用程序仍然可以使用之前發送的文件描述符,但我的應用程序無法關閉它。
是否有東西阻止ArrayList
中的存儲和隨後檢索文件描述符?