首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏王小二的Android站

    [038]Binder传输fd细节

    ParcelFileDescriptor是android提供的,继承于Parcelable,可以在AIDL中直接使用。 4.1 用法 用java层File对象创建ParcelFileDescriptor public static ParcelFileDescriptor open(File file, int mode FileDescriptor fd = openInternal(file, mode); if (fd == null) return null; return new ParcelFileDescriptor 经过Binder通信传递ParcelFileDescriptor对象。Server端拿到的fd1指向的是file2。 假如Client端用java层File对象读文件,Server端拿到的ParcelFileDescriptor对应的fd1读写文件,两者并不会有任何影响。 ?

    2.4K30发布于 2020-06-08
  • 来自专栏tea9的博客

    android Content Provider漏洞挖掘

    private static String IMAGE_DIRECTORY=localFile.getAbsolutePath(); public ParcelFileDescriptor openFile (file,ParcelFileDescriptor.MODE_READ_ONLY); } 这段代码使用android.net.Uri.getLastPathSegment()从paramUri中获取文件名 private static String IMAGE_DIRECTORY=localFile.getAbsolutePath(); public ParcelFileDescriptor openFile private static String IMAGE_DIRECTORY=localFile.getAbsolutePath(); public ParcelFileDescriptor openFile =0){ throw new IllegalArgumentException(); } return ParcelFileDescriptor.open(file,ParcelFileDescriptor.MODE_READ_ONLY

    1.1K10编辑于 2022-07-16
  • 来自专栏老欧说安卓

    Android开发笔记(一百四十二)平滑翻页的书籍浏览

    PdfRenderer允许从多个来源读取PDF文件,不同来源的PDF文件打开操作由ParcelFileDescriptor完成,该类的对象可以通过两种方式获得,一种方式是从assets目录下读取pdf文件 (); 从存储卡上读取pdf文件的代码举例如下: ParcelFileDescriptor fd = ParcelFileDescriptor.open( new File("example.pdf "), ParcelFileDescriptor.MODE_READ_ONLY); 打开PDF文件只是第一步,接下来还要使用PdfRenderer加载pdf文件,并进行相关的处理操作,PdfRenderer 的常用方法说明如下: 构造函数:从ParcelFileDescriptor对象构造一个PdfRenderer实例。 fd = ParcelFileDescriptor.open( new File(path), ParcelFileDescriptor.MODE_READ_ONLY); PdfRenderer

    1.5K10发布于 2019-01-18
  • 来自专栏曾大稳的博客

    Glide v3.7源码分析(2)-----RequestManager.load

    获取fileDescriptorModelLoader ModelLoader<T, ParcelFileDescriptor> fileDescriptorModelLoader = new StreamFileDataLoadProvider()); //GenericLoaderFactory注册 register(File.class, ParcelFileDescriptor.class Glide.buildFileDescriptorModelLoader:获取fileDescriptorModelLoader public static <T> ModelLoader<T, ParcelFileDescriptor , context); } 这一步和【1】差不多的流程,已module.class = String.class为例子,register(String.class, ParcelFileDescriptor.class modelClass, ModelLoader<ModelType, InputStream> streamModelLoader, ModelLoader<ModelType, ParcelFileDescriptor

    1.1K10发布于 2018-09-11
  • 来自专栏Android干货

    Android项目实战(六十一):pdf文件用图片方式预览

    android.arch.lifecycle.MutableLiveData; import android.graphics.Bitmap; import android.graphics.pdf.PdfRenderer; import android.os.ParcelFileDescriptor Boolean> mNextEnabled = new MutableLiveData<>(); private final Executor mExecutor; private ParcelFileDescriptor return; } Log.i("xqxinfo","file->"+file.getAbsolutePath()); mFileDescriptor = ParcelFileDescriptor.open (file, ParcelFileDescriptor.MODE_READ_ONLY); if (mFileDescriptor !

    1.2K10发布于 2020-12-21
  • 来自专栏王小二的Android站

    [006]匿名共享内存(Ashmem)的使用

    import android.os.IBinder; import android.os.MemoryFile; import android.os.Parcel; import android.os.ParcelFileDescriptor 通过反射获得文件句柄 FileDescriptor fd = (FileDescriptor) method.invoke(mf); ParcelFileDescriptor pfd = ParcelFileDescriptor.dup(fd); //将文件句柄写到binder调用的返回值中。

    2.5K42发布于 2020-06-08
  • 来自专栏携程技术

    干货 | 携程Android 10适配踩坑指南

    parcelFileDescriptor = null; FileDescriptor fileDescriptor = null; Bitmap bitmap = null; if (parcelFileDescriptor ! = null && parcelFileDescriptor.getFileDescriptor() ! = null) { fileDescriptor = parcelFileDescriptor.getFileDescriptor(); //转换uri为 = null) { parcelFileDescriptor.close(); }catch (IOException e) { } }

    4K77发布于 2020-04-21
  • 来自专栏小工匠聊架构

    ContentProvider再探——Document Provider

    6)根据Uri获得Bitmap private Bitmap getBitmapFromUri(Uri uri) throws IOException { ParcelFileDescriptor parcelFileDescriptor = getContentResolver().openFileDescriptor(uri, "r"); FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); Bitmap image = BitmapFactory.decodeFileDescriptor (fileDescriptor); parcelFileDescriptor.close(); return image; } ? = null) { stringBuilder.append(line); } fileInputStream.close(); parcelFileDescriptor.close

    1.2K30发布于 2021-08-16
  • 来自专栏包子的书架

    Glide4.8版本中,Glide是如何加载网络美女图片

    ByteBufferGifDecoder(context, registry.getImageHeaderParsers(), bitmapPool, arrayPool); ResourceDecoder<ParcelFileDescriptor Bitmap.class, streamBitmapDecoder) .append( Registry.BUCKET\_BITMAP, ParcelFileDescriptor.class streamBitmapDecoder)) .append( Registry.BUCKET\_BITMAP\_DRAWABLE, ParcelFileDescriptor.class InputStream.class, resourceLoaderStreamFactory) .append( int.class, ParcelFileDescriptor.class new UriLoader.StreamFactory(contentResolver)) .append( Uri.class, ParcelFileDescriptor.class

    2.1K60发布于 2020-06-17
  • 来自专栏信数据得永生

    安卓应用安全指南 4.6.3 处理文件 高级话题

    android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.ParcelFileDescriptor failed to close file"); } } return true; } @Override public ParcelFileDescriptor ; return ParcelFileDescriptor.open(file, modeBits); } @Override public String getType android.content.pm.ProviderInfo; import android.net.Uri; import android.os.Bundle; import android.os.ParcelFileDescriptor ParcelFileDescriptor pfd = null; try { pfd = getContentResolver().openFileDescriptor

    1.1K20编辑于 2022-12-01
  • 来自专栏码上积木

    透过FileProvider再看ContentProvider

    android.content.ContentResolver#openFileDescriptor(Uri, String) ContentResolver.openFileDescriptor} to get a {@link ParcelFileDescriptor } 也就是openFileDescriptor方法,拿到ParcelFileDescriptor类型数据,其实就是一个文件描述符,然后就可以读取文件流了。 ParcelFileDescriptor parcelFileDescriptor = getContentResolver().openFileDescriptor(intent.getData(), "r"); FileReader reader = new FileReader(parcelFileDescriptor.getFileDescriptor()); BufferedReader bufferedReader

    1.6K20发布于 2021-03-10
  • 来自专栏猫哥的专栏

    [Glide4源码解析系列] — 1.Glide初始化

    在加载成为InputStream ResourceLoader.UriFactory 将资源ID转换为Uri ResourceLoader.FileDescriptorFactory 将资源ID转化为ParcelFileDescriptor 转换为ByteBuffer FileLoader.StreamFactory 将File转换为InputStream FileLoader.FileDescriptorFactory 将File转化为ParcelFileDescriptor Uri转换为InputStream UriLoader.StreamFactory 将Uri转换为InputStream UriLoader.FileDescriptorFactory 将Uri转换为ParcelFileDescriptor 实在太多,只列出了部分) 源数据 转换数据 转换器 Integer.class InputStream.class ResourceLoader.StreamFactory Integer.class ParcelFileDescriptor.class

    1.2K40发布于 2020-04-01
  • 来自专栏Android技术分享

    FileProvider你了解多少?透过FileProvider来看看四大组件之一ContentProvider!

    android.content.ContentResolver#openFileDescriptor(Uri, String) ContentResolver.openFileDescriptor} to get a {@link ParcelFileDescriptor } 也就是openFileDescriptor方法,拿到ParcelFileDescriptor类型数据,其实就是一个文件描述符,然后就可以读取文件流了。 ParcelFileDescriptor parcelFileDescriptor = getContentResolver().openFileDescriptor(intent.getData(), "r"); FileReader reader = new FileReader(parcelFileDescriptor.getFileDescriptor()); BufferedReader bufferedReader

    1.2K01发布于 2021-03-01
  • 来自专栏有价值炮灰

    Android 组件逻辑漏洞漫谈

    但是如果代码写得不严谨,就可能会出现路径穿越等问题,一个经典的漏洞实现如下: @Override public ParcelFileDescriptor openFile(Uri uri, String (file, ParcelFileDescriptor.MODE_READ_ONLY); } throw new FileNotFoundException(uri.getPath()) (f, ParcelFileDescriptor.MODE_READ_ONLY); } 这里想用 getLastPathSegment 去只获取最后一级的文件名,但实际上可以被 URL encode 的路径绕过 正确的防御和过滤方式如下: public ParcelFileDescriptor openFile (Uri uri, String mode) throws FileNotFoundException (mode); return ParcelFileDescriptor.open(new File(path), modeBits); } 这个方法的主要作用是方便子类用于快速实现 openFile

    2.4K50编辑于 2023-02-12
  • 来自专栏非著名程序员

    Android 图片选择到裁剪之步步深坑

    void handleGalleryKitKatResult(int resultCode, Intent data) { File faceFile; try { ParcelFileDescriptor parcelFileDescriptor = getContentResolver().openFileDescriptor(contentUri, "r"); FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); Bitmap image = BitmapFactory.decodeFileDescriptor

    2.2K80发布于 2018-02-02
  • 来自专栏Frank909

    Kotlin 第二弹:Android 中 PDF 创建与渲染实践

    = null var parcelfd : ParcelFileDescriptor? = null var mBitmap : Bitmap? (file,ParcelFileDescriptor.MODE_READ_ONLY) btn_prev.setOnClickListener { renderPrev() } 注意的是 PdfRenderer 构造方法接受的参数是一个 ParcelFileDescriptor 对象。 所以,我们要将 pdf 路径创建的 File 对象转换成 ParcelFileDescriptor。 parcelfd = ParcelFileDescriptor.open(file,ParcelFileDescriptor.MODE_READ_ONLY) 整个 Activity 最核心的方法是 renderPage

    2.7K10发布于 2019-01-14
  • 来自专栏fjal

    MemoryFile 共享内存原理分析

    MemoryFile.class.getDeclaredMethod("getFileDescriptor"); FileDescriptor des = (FileDescriptor) method.invoke(memoryFile); ParcelFileDescriptor  pfd = ParcelFileDescriptor.dup(des); 「进程 B 中通过 binder 拿到 A 进程中准备好的文件描述符,然后直接读取数据:」 FileDescriptor descriptor

    1.4K40编辑于 2021-12-03
  • 来自专栏郭霖

    Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程

    final ModelLoader<ModelType, InputStream> streamModelLoader; private final ModelLoader<ModelType, ParcelFileDescriptor (Glide glide, ModelLoader<A, InputStream> streamModelLoader, ModelLoader<A, ParcelFileDescriptor modelClass, ModelLoader<ModelType, InputStream> streamModelLoader, ModelLoader<ModelType, ParcelFileDescriptor (Glide glide, ModelLoader<A, InputStream> streamModelLoader, ModelLoader<A, ParcelFileDescriptor > { private final DataFetcher<InputStream> streamFetcher; private final DataFetcher<ParcelFileDescriptor

    3K100发布于 2018-01-08
  • 来自专栏向治洪

    android读取sd卡图片并进行缩放操作

    android.media.MediaMetadataRetriever;   import android.media.MediaFile.MediaFileType;   import android.net.Uri;   import android.os.ParcelFileDescriptor Bitmap makeBitmap(int minSideLength, int maxNumOfPixels,               Uri uri, ContentResolver cr, ParcelFileDescriptor             closeSilently(pfd);           }   return b;       }   private static void closeSilently(ParcelFileDescriptor           c.close();         } catch (Throwable t) {   // do nothing       }       }   private static ParcelFileDescriptor

    1.9K90发布于 2018-01-29
  • 来自专栏程序员修炼之路

    字节P7面试官亲述:90%Android候选人挂在这5个Binder机制细节

    零拷贝传输方案: // 使用Ashmem共享内存传输大文件 ParcelFileDescriptor pfd = ParcelFileDescriptor.fromFd(fd); parcel.writeFileDescriptor

    53000编辑于 2025-03-03
领券