使用PictureSelector框架在Android Q上遇到的問(wèn)題

問(wèn)題描述:
紅米k30pro Android版本10 targetSdk30 選擇圖片或拍照完成后上傳圖片時(shí)一直停留在上傳圖片的頁(yè)面,無(wú)法正常上傳圖片到后臺(tái)服務(wù)器。

排查過(guò)程:
之前開發(fā)測(cè)試時(shí)都是使用的Android 9及以下版本,都可以正常從相冊(cè)選擇圖片或拍照,直到使用自己的手機(jī)無(wú)意中測(cè)試發(fā)現(xiàn)頭像無(wú)法更換。 (開始還以為是框架兼容版本的問(wèn)題,都差點(diǎn)準(zhǔn)備改源碼的 [手動(dòng)苦笑])
后面冷靜下來(lái)根據(jù)打印的日志排查發(fā)現(xiàn):
在Android 9及以下版本框架返回的圖片路徑為: “/storage/emulated/0/cent/Images/null-26e74112e4d.jpg”
在我的手機(jī)上返回的路徑為:“ content://media/external/file/985”,是uri類型的地址
找到問(wèn)題的根源就好辦了。

處理辦法:
在原有的基礎(chǔ)上新增一個(gè)判斷(“path”是返回的圖片路徑,具體可以查看框架的demo):

  if (path.contains("content://")) {
        Uri uri = Uri.parse(path);
        path = FileUtils.getFilePathByUri_BELOWAPI11(uri, this);
   }

轉(zhuǎn)換的工具類我也貼出來(lái):

 public class FileUtils {

/**
 * Uri 轉(zhuǎn) 絕對(duì)路徑
 *
 * @param uri
 * @return
 */
  public static String getFilePathByUri_BELOWAPI11(Uri uri, Context context) {
    // 以 content:// 開頭的,比如  content://media/external/file/960
    if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
        String path = null;
        String[] projection = new String[]{MediaStore.Images.Media.DATA};
        Cursor cursor = context.getContentResolver().query(uri, projection, null,
                null, null);
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                if (columnIndex > -1) {
                    path = cursor.getString(columnIndex);
                }
            }
            cursor.close();
        }
        return path;
    }
    return null;
}
}

ok, 問(wèn)題解決 ,記錄。
ps: 之前我一直以為是Android Q沙盒類型的問(wèn)題,嘗試在manifest的application節(jié)點(diǎn)中沒有配置android:requestLegacyExternalStorage="true",同時(shí)開啟isAndroidQTransform(false)來(lái)關(guān)閉在Android Q 拷貝至應(yīng)用沙盒的操作,但并沒有解決我的問(wèn)題。

pss: PictureSelector框架確實(shí)很N逼,兼容性很好,非常的感謝作者無(wú)償開源的這個(gè)庫(kù),代碼質(zhì)量很高,功能很全 。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容