亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > OS > 安卓 > 正文

AndroidQ 沙箱適配多媒體文件(小結)

2024-09-11 17:15:18
字體:
來源:轉載
供稿:網友

綜述

所有內容的訪問變化見下圖:

外部媒體文件的掃描,讀取和寫入

最容易被踩坑的應該是,對外部媒體文件,照片,視頻,圖片的讀取或寫入。

掃描

首先是掃描。掃描依然是使用 query MediaStore 的方式。一句話介紹 MediaStore,MediaStore 就是Android系統中的一個多媒體數據庫。代碼如下圖所示,以搜索本地視頻為例子:

protected List<VideoInfo> doInBackground(Void... params) {  mContentResolver = context.getContentResolver();  String[] mediaColumns = { MediaStore.Video.Media._ID, MediaStore.Video.Media.DATA,      MediaStore.Video.Media.TITLE, MediaStore.Video.Media.MIME_TYPE,      MediaStore.Video.Media.DISPLAY_NAME, MediaStore.Video.Media.SIZE,      MediaStore.Video.Media.DATE_ADDED, MediaStore.Video.Media.DURATION,      MediaStore.Video.Media.WIDTH, MediaStore.Video.Media.HEIGHT };  Cursor mCursor = mContentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, mediaColumns,      null, null, MediaStore.Video.Media.DATE_ADDED);  if (mCursor == null) {    return null;  }  // 注意,DATA 數據在 Android Q 以前代表了文件的路徑,但在 Android Q上該路徑無法被訪問,因此沒有意義。  ixData = mCursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);  ixMime = mCursor.getColumnIndexOrThrow(MediaStore.Video.Media.MIME_TYPE);  // ID 是在 Android Q 上讀取文件的關鍵字段  ixId = mCursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID);  ixSize = mCursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);  ixTitle = mCursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE);  allImages = new ArrayList<VideoInfo>();  mTotalVideoCount = 0;  mCursor.moveToLast();    while (mCursor.moveToPrevious()) {    if (addVideo(mCursor) == 0) {      continue;    } else if (addVideo(mCursor) == 1) {      break;    }  }  mCursor.close();    return allImages;}

既然 data 不可用,就需要知曉 id 的使用方式,首先是使用 id 拼裝出 content uri ,如下所示:

public getRealPath(String id) {  return MediaStore.Video.Media.EXTERNAL_CONTENT_URI.buildUpon().appendPath(String.valueOf(id)).build().toString();}

Image 同理換成 MediaStore.Images。

讀取和寫入

其次,是讀取 content uri。這里需要注意 File file = new File(contentUri); 是無法獲取到文件的。file.exist() 為 false。

那么就產生兩個問題:1. 如何確定 ContentUri 形式的文件存在 2. 如何讀取或寫入文件。

首先,對于 Content Uri 的讀取,必須借助于 ContentResolver。

其次,對于 1,沒有找到 Google 文檔中提供比較容易的API,只能采用打開 FileDescriptor 是否成功的形式,代碼如下所示:

public boolean isContentUriExists(Context context, Uri uri) {  if (null == context) {    return false;  }  ContentResolver cr = context.getContentResolver();  try {    AssetFileDescriptor afd = cr.openAssetFileDescriptor(uri, "r");    if (null == afd) {      iterator.remove();    } else {      try {        afd.close();      } catch (IOException e) {      }    }  } catch (FileNotFoundException e) {    return false;  }  return true;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产二区| 精品久久久久久久久久ntr影视| 欧美日韩美女在线| 亚洲成av人片在线观看香蕉| 疯狂欧美牲乱大交777| 亚洲成人激情在线| 欧美专区在线播放| 国产欧美在线播放| 久久亚洲成人精品| 日韩欧美成人精品| 国产成人精品一区二区| 91精品国产沙发| 亚洲综合精品一区二区| 亚洲人成电影网站色…| 性欧美视频videos6一9| 欧美成人手机在线| 亚洲电影中文字幕| 91免费的视频在线播放| 国产成人a亚洲精品| 日韩有码在线电影| 国产日韩欧美一二三区| 亚洲欧洲激情在线| 久久久久久久av| 亚洲欧美国内爽妇网| 亚洲综合国产精品| 亚洲综合av影视| 精品av在线播放| 亚洲a中文字幕| 亚洲欧美日韩国产成人| 久操成人在线视频| 中文字幕日韩在线播放| 亚洲精品视频在线播放| 91超碰caoporn97人人| 一区二区日韩精品| 51视频国产精品一区二区| 亚洲欧美日韩另类| 色综合久久精品亚洲国产| 欧美电影电视剧在线观看| 久久久久久久色| 欧美大片大片在线播放| 亚洲精品国产精品国自产观看浪潮| 91禁外国网站| 欧美激情中文字幕在线| 欧美寡妇偷汉性猛交| 成人a视频在线观看| 不卡av电影在线观看| 欧美怡春院一区二区三区| 欧美电影院免费观看| 日韩精品高清在线| 色老头一区二区三区| 国产日韩欧美中文在线播放| 亚洲精品第一国产综合精品| 热re91久久精品国99热蜜臀| 欧美人交a欧美精品| 在线免费观看羞羞视频一区二区| 国产成人avxxxxx在线看| 欧美性xxxxxxx| 欧美激情在线一区| 日韩欧美在线国产| 亚洲va欧美va国产综合剧情| 国内免费精品永久在线视频| 国产精品亚洲视频在线观看| 国产精品美女久久久久av超清| 亚洲第一视频网站| 亚洲国产欧美一区二区三区同亚洲| 国产精品第一页在线| 国产精品高清在线观看| 久久久97精品| 97久久超碰福利国产精品…| 久久久久久网址| 精品久久久久久久久久| 成人午夜在线影院| 亚洲欧美日韩爽爽影院| 久久人人爽人人爽人人片av高清| 亚洲一区二区三| 亚洲影视中文字幕| 日韩精品中文字幕在线| 日韩精品电影网| 久久久久久久久国产精品| 欧美一级淫片播放口| 国产视频亚洲视频| 欧美日韩视频在线| 欧美一级在线亚洲天堂| 91免费观看网站| 成人福利网站在线观看11| 精品久久久中文| 亚洲欧美日韩精品久久奇米色影视| 一区二区三区动漫| 91免费版网站入口| 欧美一级电影在线| 久久精品国产成人| 成人激情视频在线| 久久视频在线看| 欧美专区在线观看| 国产精品成久久久久三级| 日韩在线中文视频| 国产精品第一视频| 久久久国产精品x99av| 91av免费观看91av精品在线| 欧美电影第一页| 国产成人精品综合久久久| 国模精品视频一区二区三区| 欧美中文字幕视频在线观看| 亚洲国产福利在线| 国内精品久久影院| 国产日韩欧美在线看| 亚洲欧美中文日韩在线v日本| 日本韩国欧美精品大片卡二| 亚洲色图50p| 成人有码在线播放| 国产精品福利久久久| 一区二区三区无码高清视频| 日韩中文理论片| 国产欧美日韩中文字幕| 好吊成人免视频| 亚洲第一精品久久忘忧草社区| 精品人伦一区二区三区蜜桃免费| 亚洲有声小说3d| 成人a视频在线观看| 成人久久一区二区三区| 美女视频黄免费的亚洲男人天堂| 精品久久久久久久久久久久| 久久综合久久美利坚合众国| 国模私拍视频一区| 国产精品福利无圣光在线一区| 成人动漫网站在线观看| 日韩大胆人体377p| 日韩亚洲精品视频| 久久精品国产96久久久香蕉| 亚洲va欧美va在线观看| 操人视频在线观看欧美| 国产一区二区三区精品久久久| 亚洲福利影片在线| 精品伊人久久97| 91国产中文字幕| 欧美日韩国产影院| 国产精品久久999| 日韩中文字幕欧美| 一区二区三区美女xx视频| 亚洲色图第三页| 日韩美女免费线视频| 亚洲伦理中文字幕| 日本欧美中文字幕| 欧美激情精品久久久久久| 中文字幕一区二区三区电影| 亚洲社区在线观看| 欧美激情第6页| 国产专区精品视频| 久久深夜福利免费观看| 亲爱的老师9免费观看全集电视剧| 日韩av免费看| 欧美日韩精品中文字幕| 亚洲精品成人久久电影| 国产亚洲精品久久| 国产精品久久精品| 91中文字幕一区| www.日韩视频| 欧美成人黑人xx视频免费观看| 欧美日本黄视频| 国产人妖伪娘一区91| 69国产精品成人在线播放| 日韩免费观看av| 亚洲美女av黄| 亚洲一区制服诱惑|