1. <dd id="erndk"></dd>
                1. Android打開手機相冊獲取圖片路徑

                  曉果博客 2019/7/7 22:16:47

                  這篇文章主要為大家詳細介紹了Android打開手機相冊獲取圖片路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下

                  本文實例為大家分享了Android打開手機相冊獲取圖片路徑的具體代碼,供大家參考,具體內容如下

                  根據打開相機返回的Uri uri = data.getData();獲取該相片的真正SD卡路徑!

                  權限

                  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
                  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

                  動態申請權限

                  String[] mPermissionList = new String[]{
                     Manifest.permission.WRITE_EXTERNAL_STORAGE,
                     Manifest.permission.READ_EXTERNAL_STORAGE};
                   public static final int REQUEST_PICK_IMAGE = 11101;

                  打開手機相冊

                  ActivityCompat.requestPermissions(MainActivity.this, mPermissionList, 100);
                  @Override
                   public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
                    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
                    switch (requestCode) {
                     case 100:
                      boolean writeExternalStorage = grantResults[0] == PackageManager.PERMISSION_GRANTED;
                      boolean readExternalStorage = grantResults[1] == PackageManager.PERMISSION_GRANTED;
                      if (grantResults.length > 0 && writeExternalStorage && readExternalStorage) {
                       getImage();
                      } else {
                       Toast.makeText(this, "請設置必要權限", Toast.LENGTH_SHORT).show();
                      }
                  
                      break;
                    }
                   }
                  
                   private void getImage() {
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
                     startActivityForResult(new Intent(Intent.ACTION_GET_CONTENT).setType("image/*"),
                       REQUEST_PICK_IMAGE);
                    } else {
                     Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                     intent.addCategory(Intent.CATEGORY_OPENABLE);
                     intent.setType("image/*");
                     startActivityForResult(intent, REQUEST_PICK_IMAGE);
                    }
                   }

                  獲取相冊返回的Uri

                  @Override
                   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                    super.onActivityResult(requestCode, resultCode, data);
                    if (resultCode == Activity.RESULT_OK) {
                     switch (requestCode) {
                      case REQUEST_PICK_IMAGE:
                       if (data != null) {
                        String realPathFromUri = RealPathFromUriUtils.getRealPathFromUri(this, data.getData());
                       } else {
                        Toast.makeText(this, "圖片損壞,請重新選擇", Toast.LENGTH_SHORT).show();
                       }
                  
                       break;
                     }
                    }
                   }

                  這里的data.getData()返回的就是Uri,realPathFromUri 為真正路徑

                  獲取真正路徑

                  package com.example.richeditortest;
                  
                  import android.annotation.SuppressLint;
                  import android.content.ContentUris;
                  import android.content.Context;
                  import android.database.Cursor;
                  import android.net.Uri;
                  import android.os.Build;
                  import android.provider.DocumentsContract;
                  import android.provider.MediaStore;
                  
                  public class RealPathFromUriUtils {
                   /**
                    * 根據Uri獲取圖片的絕對路徑
                    *
                    * @param context 上下文對象
                    * @param uri  圖片的Uri
                    * @return 如果Uri對應的圖片存在, 那么返回該圖片的絕對路徑, 否則返回null
                    */
                   public static String getRealPathFromUri(Context context, Uri uri) {
                    int sdkVersion = Build.VERSION.SDK_INT;
                    if (sdkVersion >= 19) { // api >= 19
                     return getRealPathFromUriAboveApi19(context, uri);
                    } else { // api < 19
                     return getRealPathFromUriBelowAPI19(context, uri);
                    }
                   }
                  
                   /**
                    * 適配api19以下(不包括api19),根據uri獲取圖片的絕對路徑
                    *
                    * @param context 上下文對象
                    * @param uri  圖片的Uri
                    * @return 如果Uri對應的圖片存在, 那么返回該圖片的絕對路徑, 否則返回null
                    */
                   private static String getRealPathFromUriBelowAPI19(Context context, Uri uri) {
                    return getDataColumn(context, uri, null, null);
                   }
                  
                   /**
                    * 適配api19及以上,根據uri獲取圖片的絕對路徑
                    *
                    * @param context 上下文對象
                    * @param uri  圖片的Uri
                    * @return 如果Uri對應的圖片存在, 那么返回該圖片的絕對路徑, 否則返回null
                    */
                   @SuppressLint("NewApi")
                   private static String getRealPathFromUriAboveApi19(Context context, Uri uri) {
                    String filePath = null;
                    if (DocumentsContract.isDocumentUri(context, uri)) {
                     // 如果是document類型的 uri, 則通過document id來進行處理
                     String documentId = DocumentsContract.getDocumentId(uri);
                     if (isMediaDocument(uri)) { // MediaProvider
                      // 使用':'分割
                      String id = documentId.split(":")[1];
                  
                      String selection = MediaStore.Images.Media._ID + "=?";
                      String[] selectionArgs = {id};
                      filePath = getDataColumn(context, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection, selectionArgs);
                     } else if (isDownloadsDocument(uri)) { // DownloadsProvider
                      Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(documentId));
                      filePath = getDataColumn(context, contentUri, null, null);
                     }
                    } else if ("content".equalsIgnoreCase(uri.getScheme())) {
                     // 如果是 content 類型的 Uri
                     filePath = getDataColumn(context, uri, null, null);
                    } else if ("file".equals(uri.getScheme())) {
                     // 如果是 file 類型的 Uri,直接獲取圖片對應的路徑
                     filePath = uri.getPath();
                    }
                    return filePath;
                   }
                  
                   /**
                    * 獲取數據庫表中的 _data 列,即返回Uri對應的文件路徑
                    *
                    * @return
                    */
                   private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
                    String path = null;
                  
                    String[] projection = new String[]{MediaStore.Images.Media.DATA};
                    Cursor cursor = null;
                    try {
                     cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
                     if (cursor != null && cursor.moveToFirst()) {
                      int columnIndex = cursor.getColumnIndexOrThrow(projection[0]);
                      path = cursor.getString(columnIndex);
                     }
                    } catch (Exception e) {
                     if (cursor != null) {
                      cursor.close();
                     }
                    }
                    return path;
                   }
                  
                   /**
                    * @param uri the Uri to check
                    * @return Whether the Uri authority is MediaProvider
                    */
                   private static boolean isMediaDocument(Uri uri) {
                    return "com.android.providers.media.documents".equals(uri.getAuthority());
                   }
                  
                   /**
                    * @param uri the Uri to check
                    * @return Whether the Uri authority is DownloadsProvider
                    */
                   private static boolean isDownloadsDocument(Uri uri) {
                    return "com.android.providers.downloads.documents".equals(uri.getAuthority());
                   }
                  }

                  以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持找一找教程網。

                  隨時隨地學軟件編程-關注百度小程序和微信小程序
                  關于找一找教程網

                  本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
                  本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。
                  [Android打開手機相冊獲取圖片路徑]http://www.yachtsalesaustralia.com/tech/detail-63932.html

                  贊(0)
                  關注微信小程序
                  程序員編程王-隨時隨地學編程

                  掃描二維碼或查找【程序員編程王】

                  可以隨時隨地學編程啦!

                  技術文章導航 更多>
                  国产在线拍揄自揄视频菠萝

                        1. <dd id="erndk"></dd>