![](/img/trans.png)
[英]Android 9 (Pie) ContentResolver query MediaStore.Images.Media.EXTERNAL_CONTENT_URI returns null on api 28
[英]Android: MediaStore.Images.Media.EXTERNAL_CONTENT_URI … show pictures in full size?
我想這個問題以前曾被問過,但我似乎找不到合適的答案/解決方案。
有一個記筆記的應用程序,可以拍照。 為此,我啟動了一個意圖,即啟動了內置的camera-app。 到現在為止還挺好。
但是,當我在應用程序中顯示該圖像時,它的格式要小得多:(
有趣/奇怪的是,相機應用確實拍攝了全分辨率圖片! 但是由於某些原因,我無法在我的應用程序中顯示完整版本???
因此,當我使用標准的Android Gallery應用程序並轉到該圖片時,很明顯它是完整尺寸的(我可以在自己的應用程序中放大並查看我放大時實際上看不到的細節)。 另外,尺寸實際上是使用5MP相機拍攝的原始尺寸。
在我的應用中,它們很小。 我的手機裝有Android 2.2,但在模擬器(Android 2.1)上也是如此。
我應該如何在我的應用程序中檢索圖片??? 嘗試了幾種方法,但沒有用:(不需要完整的示例(盡管這很受歡迎),僅需提供一些線索即可進行自我搜索。
提前發送!
科恩Greetingz <
很奇怪,我通過查看插入到我自己的數據庫中的_ID值找到了解決方案/答案。 首先,我注意到當我選擇一個現有圖像(通過內置的Android Gallery)時,我確實獲得了全尺寸圖像。
當我第一次拍照時,我得到了縮放的圖像。 那么區別在哪里。 大約在圖片的_ID存儲在我的數據庫中的位置。 就我而言,也許在大多數情況下,這發生在onActivityResult過程中。
首先看看我最初擁有的東西:
if(requestCode == REQUEST_CAMERA && resultCode == RESULT_OK){
String timestamp = Long.toString(System.currentTimeMillis());
// get the picture
mPicture = (Bitmap)result.getExtras().get("data");
//save image to gallery
String pictureUrl = MediaStore.Images.Media.insertImage(getContentResolver(), mPicture, getResources().getString(R.string.app_name_short), timestamp);
insertPictureAttachment(mRowId.intValue(), Integer.parseInt(Uri.parse(pictureUrl).getLastPathSegment()));
“ insertPictureAttachment”方法將實際插入數據庫。
向后看,無論如何還是有點奇怪的……制作一張圖片,所以我可以為其制作一個URI,然后獲取最后一個路徑段(即_ID),因此可以將其插入數據庫中。
最終,事實證明我可以只用一行替換上面的代碼:
insertPictureAttachment(mRowId.intValue(), Integer.parseInt(result.getData().getLastPathSegment()));
更短,而且實際上更有意義...而不是從result.getExtras()。get(“ data”)獲取信息,我從result.getData()獲取我的信息,該信息提供了完整的原始_ID尺寸的圖像。
不過,我將對此做一些進一步的研究,因為目前尚不清楚為什么我實際上不必調用MediaStore.Images.Media.insertImage(...)...如果我想具體說明,也許我必須這樣做功能(例如自定義文件位置等)。
科恩Greetingz <
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.