您好,登錄后才能下訂單哦!
不懂如何適配AndroidQ拍照和讀取相冊圖片??其實(shí)想解決這個問題也不難,下面讓小編帶著大家一起學(xué)習(xí)怎么去解決,希望大家閱讀完這篇文章后大所收獲。
Google發(fā)行Android Q版本也有很長一段時間了,華為應(yīng)用市場已經(jīng)要求要適配Android Q版本了,所以,我們也要去對Android Q進(jìn)行適配。
先講一下咱們這節(jié)用到的新特性
如果有想具體了解Android Q新版特效的可以去 官方文檔
我們在這個地方記錄一下Android Q版本進(jìn)行拍照保存到相冊的功能。
權(quán)限問題
Android Q不再需要申請文件讀寫權(quán)限,默認(rèn)可以讀寫自己沙盒文件和公共媒體文件。因?yàn)橄鄡詫儆诠裁襟w文件,所以,Android Q 可以不用 再動態(tài)申請權(quán)限。但是Android Q以下版本必須要申請權(quán)限才可以訪問。
拍照
圖片正常保存
拍照:Android Q之前版本使用的,將圖片保存到指定文件夾,拍照完成后需要通知相冊刷新
拍照代碼
// 拍照存放路徑 File fileDir = new File(Environment.getExternalStorageDirectory(), "Pictures"); if (!fileDir.exists()) { fileDir.mkdir(); } //圖片名稱 String fileName = "/IMG_" + System.currentTimeMillis() + ".jpg"; //跳轉(zhuǎn)到相機(jī) Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Uri uri; //適配Android N之后版本 if (Build.VERSION.SDK_INT >= 24) { uri = FileProvider.getUriForFile(this, ImagePickerProvider.getFileProviderName(this), new File(mFilePath)); } else { //適配Android N版本之前 uri = Uri.fromFile(new File(mFilePath)); } intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); //跳轉(zhuǎn),需要在onActivityResult進(jìn)行處理 startActivityForResult(intent, 1111);
刷新相冊代碼
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + mFilePath)));
以上就是Android Q之前版本通用的拍照代碼,有需要的可以直接復(fù)制就行
將圖片保存到沙盒內(nèi)
Android Q版本使用,將圖片存放到沙盒文件內(nèi),圖庫無法刷新,無法顯示
// 獲取圖片沙盒文件夾 File PICTURES = getExternalFilesDir(Environment.DIRECTORY_PICTURES); //圖片名稱 mFileName = "IMG_" + System.currentTimeMillis() + ".jpg"; //圖片路徑 mFilePath = PICTURES.getAbsolutePath()+"/"+mFileName; //跳轉(zhuǎn)到相機(jī) Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Uri uri; if (Build.VERSION.SDK_INT >= 24) { uri = FileProvider.getUriForFile(this, ImagePickerProvider.getFileProviderName(this), new File(mFilePath)); } else { uri = Uri.fromFile(new File(mFilePath)); } intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(intent, 1111);
這個不用調(diào)用代碼刷新相冊庫,因?yàn)樗⑿铝艘膊荒茱@示😁
仔細(xì)對比一下發(fā)現(xiàn)這兩種基本上沒有什么差別,只有文件存放路徑不同,因?yàn)樵贏ndroid Q新版本上對存儲做出了改變。
將圖片保存到公共文件夾
//------------------------- //拍照存放路徑 //為了適配Android Q版本以下 File fileDir = new File(Environment.getExternalStorageDirectory(), "Pictures"); if (!fileDir.exists()) { fileDir.mkdir(); } String fileName = "/IMG_" + System.currentTimeMillis() + ".jpg"; //-------------------------- //-------------------------- //設(shè)置參數(shù) Uri uri = null; // 設(shè)置保存參數(shù)到ContentValues中 ContentValues contentValues = new ContentValues(); //設(shè)置文件名 contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, fileName); //兼容Android Q和以下版本 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { //android Q中不再使用DATA字段,而用RELATIVE_PATH代替 //RELATIVE_PATH是相對路徑不是絕對路徑 //DCIM是系統(tǒng)文件夾,關(guān)于系統(tǒng)文件夾可以到系統(tǒng)自帶的文件管理器中查看,不可以寫沒存在的名字 contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "DCIM/Pictures"); } else { //Android Q以下版本 contentValues.put(MediaStore.Images.Media.DATA, mFilePath); } //設(shè)置文件類型 contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/JPEG"); //執(zhí)行insert操作,向系統(tǒng)文件夾中添加文件 //EXTERNAL_CONTENT_URI代表外部存儲器,該值不變 uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); // 若生成了uri,則表示該文件添加成功 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(intent, 1111);
使用這段代碼也不用刷新相冊庫,會自動刷新。
存到公共文件的操作,相對來說麻煩點(diǎn),但是也還好。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享如何適配AndroidQ拍照和讀取相冊圖片?內(nèi)容對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。