這篇文章主要介紹了如何在Android中實(shí)現(xiàn)Uri與Path之間的轉(zhuǎn)換,創(chuàng)新互聯(lián)小編覺得不錯(cuò),現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨創(chuàng)新互聯(lián)小編來看看吧!
創(chuàng)新互聯(lián)建站,為您提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計(jì),對服務(wù)石涼亭等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場的競爭激烈,認(rèn)真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!Android是什么Android是一種基于Linux內(nèi)核的自由及開放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦,由美國Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。
Android Uri to Path
現(xiàn)在遇到的常規(guī)Uri有兩種:
媒體文件的Uri是content://, 表示這是一個(gè)數(shù)據(jù)庫數(shù)據(jù)。去數(shù)據(jù)庫查詢正常返回。
其他的文件Uri是file://, 表示這個(gè)是一個(gè)文件。這個(gè)uri是通過Uri.fromFile(File file)方法生成。
Media Uri To Path
在我簡書中有一篇文章Android Uri to Path當(dāng)中介紹了如何把從相冊返回的Uri轉(zhuǎn)換為Media Uri,然后再通過獲得的Media Uri獲取圖片的Path。最終通過BitmapFractory創(chuàng)建相應(yīng)的Bitmap對象。
File Uri To Path
這個(gè)轉(zhuǎn)換相對比較簡單,我們可以直接利用Android SDK提供的Uri.getPath()方法來獲取相應(yīng)的路徑,然后利用Java IO來獲取輸入流,創(chuàng)建Bitmap。如果想直接通過File Uri獲取輸入流,我們可以通過調(diào)用ContentResolves.openInputStream(Uri uri)返回得到輸入流。
bitmap = BitmapFactory.decodeStream( getContentResolver().openInputStream( GetImageUri.getImageStreamFromExternal("Screenshots/Screenshot.png")) );
這里的GetImageUri.getImageStreamFromExternal是我自己寫的一個(gè)工具類:
public static Uri getImageStreamFromExternal(String imageName) { File externalPubPath = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES ); File picPath = new File(externalPubPath, imageName); Uri uri = null; if(picPath.exists()) { uri = Uri.fromFile(picPath); } return uri; }
通過該靜態(tài)方法可以將外部存儲(chǔ)路徑下的Pictures目錄下的文件的路徑轉(zhuǎn)換為File Uri。
Android Path To Uri
File Path To File Uri
直接上代碼:
public static Uri getImageStreamFromExternal(String imageName) { File externalPubPath = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES ); File picPath = new File(externalPubPath, imageName); Uri uri = null; if(picPath.exists()) { uri = Uri.fromFile(picPath); } return uri; }
這里我們看到,最核心的部分就是利用Uri.fromFile()方法獲取到指定路徑的File Uri。
File Path To Media Uri
直接上代碼:
public static Uri getMediaUriFromPath(Context context, String path) { Uri mediaUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; Cursor cursor = context.getContentResolver().query(mediaUri, null, MediaStore.Images.Media.DISPLAY_NAME + "= ?", new String[] {path.substring(path.lastIndexOf("/") + 1)}, null); Uri uri = null; if(cursor.moveToFirst()) { uri = ContentUris.withAppendedId(mediaUri, cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID))); } cursor.close(); return uri; }
代碼分析:首先我們獲取到相冊數(shù)據(jù)庫表的Uri,mediaUri。然后我們利用ContentResolver.query()方法,并且selectionArgs傳入根據(jù)指定路徑獲得的文件名來得到一個(gè)cursor對象。然后通過這個(gè)cursor對象我們獲取到指定文件的ID。最后通過ContentUri組合mediaUri和圖片的Id,得到最終的Media Uri。
MediaStore
這個(gè)類很重要,官方文檔介紹:The Media provider contains meta data for all available media on both internal and external storage devices.意思大概是該類包含了所有在設(shè)備的內(nèi)部存儲(chǔ)和外部存儲(chǔ)的媒體文件的元數(shù)據(jù)。例如通過指定MediaStore.ACTION_IMAGE_CAPTURE為action的Intent可以打開系統(tǒng)相機(jī),MediaStore.EXTRA_OUTPUT是指定存儲(chǔ)Uri的鍵...
渣渣英語翻譯,見諒...總之這個(gè)類在訪問媒體文件時(shí)很重要。
還有一些對應(yīng)數(shù)據(jù)庫表列名,android.provider.MediaStore.MediaColumns中DATA指的是文件路徑,DISPLAY_NAME代表文件名...還有android.provider.BaseColumns中_ID就是媒體文件的ID。
以上就是創(chuàng)新互聯(lián)小編為大家收集整理的如何在Android中實(shí)現(xiàn)Uri與Path之間的轉(zhuǎn)換,如何覺得創(chuàng)新互聯(lián)網(wǎng)站的內(nèi)容還不錯(cuò),歡迎將創(chuàng)新互聯(lián)網(wǎng)站推薦給身邊好友。
分享標(biāo)題:如何在Android中實(shí)現(xiàn)Uri與Path之間的轉(zhuǎn)換-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://jinyejixie.com/article44/egeee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、關(guān)鍵詞優(yōu)化、App開發(fā)、營銷型網(wǎng)站建設(shè)、網(wǎng)站制作、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
移動(dòng)網(wǎng)站建設(shè)知識(shí)