最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分享實現(xiàn)Android圖片選擇的兩種方式

 更新時間:2016年01月17日 10:00:47   投稿:hebedich  
本文給大家分享的是Android選擇圖片的兩種方式的實現(xiàn)代碼,分別是單張選取和多張批量選取,非常的實用,有需要的小伙伴可以參考下

Android選擇圖片的兩種方式:

第一種:單張選取

通過隱式啟動activity,跳轉(zhuǎn)到相冊選擇一張返回結(jié)果

關(guān)鍵代碼如下:

發(fā)送請求:

private static final int PICTURE = 10086; //requestcode

Intent intent = new Intent();
if (Build.VERSION.SDK_INT < 19) {//因為Android SDK在4.4版本后圖片action變化了 所以在這里先判斷一下
      intent.setAction(Intent.ACTION_GET_CONTENT);
    } else {
      intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
    }
    intent.setType("image/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, PICTURE);

接收結(jié)果:

@Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (data == null) {
      this.finish();
      return;
    }
    Uri uri = data.getData();
    switch (requestCode) {
      case PICTURE:
        image = FileUtils.getUriPath(this, uri); //(因為4.4以后圖片uri發(fā)生了變化)通過文件工具類 對uri進(jìn)行解析得到圖片路徑
        break;
      default:
        break;
    }
    this.finish();
  }

文件工具類:

public class FileUtils {
  private static final String TAG = "FileUtils";
  private static final boolean DEBUG = false;
  /**
   * 獲取可讀的文件大小
   */
  public static String getReadableFileSize(int size) {
    final int BYTES_IN_KILOBYTES = 1024;
    final DecimalFormat dec = new DecimalFormat("###.#");
    final String KILOBYTES = " KB";
    final String MEGABYTES = " MB";
    final String GIGABYTES = " GB";
    float fileSize = 0;
    String suffix = KILOBYTES;
    if(size > BYTES_IN_KILOBYTES) {
      fileSize = size / BYTES_IN_KILOBYTES;
      if(fileSize > BYTES_IN_KILOBYTES) {
        fileSize = fileSize / BYTES_IN_KILOBYTES;
        if(fileSize > BYTES_IN_KILOBYTES) {
          fileSize = fileSize / BYTES_IN_KILOBYTES;
          suffix = GIGABYTES;
        } else {
          suffix = MEGABYTES;
        }
      }
    }
    return String.valueOf(dec.format(fileSize) + suffix);
  }
  /**
   * 獲取文件的文件名(不包括擴(kuò)展名)
   */
  public static String getFileNameWithoutExtension(String path) {
    if(path == null) {
      return null;
    }
    int separatorIndex = path.lastIndexOf(File.separator);
    if(separatorIndex < 0) {
      separatorIndex = 0;
    }
    int dotIndex = path.lastIndexOf(".");
    if(dotIndex < 0) {
      dotIndex = path.length();
    } else if(dotIndex < separatorIndex) {
      dotIndex = path.length();
    }
    return path.substring(separatorIndex + 1, dotIndex);
  }
  /**
   * 獲取文件名
   */
  public static String getFileName(String path) {
    if(path == null) {
      return null;
    }
    int separatorIndex = path.lastIndexOf(File.separator);
    return (separatorIndex < 0) ? path : path.substring(separatorIndex + 1, path.length());
  }
  /**
   * 獲取擴(kuò)展名
   */
  public static String getExtension(String path) {
    if(path == null) {
      return null;
    }
    int dot = path.lastIndexOf(".");
    if(dot >= 0) {
      return path.substring(dot);
    } else {
      return "";
    }
  }
  public static File getUriFile(Context context, Uri uri) {
    String path = getUriPath(context, uri);
    if(path == null) {
      return null;
    }
    return new File(path);
  }
  public static String getUriPath(Context context, Uri uri) {
    if(uri == null) {
      return null;
    }
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, uri)) {
      if("com.android.externalstorage.documents".equals(uri.getAuthority())) {
        final String docId = DocumentsContract.getDocumentId(uri);
        final String[] split = docId.split(":");
        final String type = split[0];
        if("primary".equalsIgnoreCase(type)) {
          return Environment.getExternalStorageDirectory() + "/" + split[1];
        }
      } else if("com.android.providers.downloads.documents".equals(uri.getAuthority())) {
        final String id = DocumentsContract.getDocumentId(uri);
        final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
        return getDataColumn(context, contentUri, null, null);
      } else if("com.android.providers.media.documents".equals(uri.getAuthority())) {
        final String docId = DocumentsContract.getDocumentId(uri);
        final String[] split = docId.split(":");
        final String type = split[0];
        Uri contentUri = null;
        if("image".equals(type)) {
          contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        } else if("video".equals(type)) {
          contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
        } else if("audio".equals(type)) {
          contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        }
        final String selection = "_id=?";
        final String[] selectionArgs = new String[] {split[1]};
        return getDataColumn(context, contentUri, selection, selectionArgs);
      }
    } else if("content".equalsIgnoreCase(uri.getScheme())) {
      if("com.google.android.apps.photos.content".equals(uri.getAuthority())) {
        return uri.getLastPathSegment();
      }
      return getDataColumn(context, uri, null, null);
    } else if("file".equalsIgnoreCase(uri.getScheme())) {
      return uri.getPath();
    }
    return null;
  }
  public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
    Cursor cursor = null;
    final String column = "_data";
    final String[] projection = {column};
    try {
      cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
      if(cursor != null && cursor.moveToFirst()) {
        final int column_index = cursor.getColumnIndexOrThrow(column);
        return cursor.getString(column_index);
      }
    } finally {
      if(cursor != null) cursor.close();
    }
    return null;
  }
}

第二種方式 批量選擇圖片

如果我們需要類似于微信那樣的一次選取多張圖片,很明顯第一種方式是不能滿足需求,那么怎么才能批量選取呢?andorid并提供像單張選取似的批量選取的直接方法,所以我們只能自己從數(shù)據(jù)庫中獲得。

首先我們要認(rèn)識一個類mediastore  android中所有的多媒體文件都存儲在這個數(shù)據(jù)庫中,例如圖片 視頻 音頻 等等,他通過contentprovider 向其他進(jìn)程提供數(shù)據(jù)的接口

想要從mediastore中獲得數(shù)據(jù),我們可以使用與ContentProvider 對應(yīng)的ContentResolver

關(guān)鍵代碼:

 final String[] projectionPhotos = {
        MediaStore.Images.Media._ID,//每一列的ID 圖片的ID
        MediaStore.Images.Media.BUCKET_ID,//圖片所在文件夾ID
        MediaStore.Images.Media.BUCKET_DISPLAY_NAME,//圖片所在文件夾名稱
        MediaStore.Images.Media.DATA,//圖片路徑
        MediaStore.Images.Media.DATE_TAKEN,//圖片創(chuàng)建時間
    };

 
cursor = MediaStore.Images.Media.query(context.getContentResolver(), MediaStore.Images.Media.EXTERNAL_CONTENT_URI
    , projectionPhotos, "", null, MediaStore.Images.Media.DATE_TAKEN + " DESC");

所有圖片都在cursor里了 再從cursor中取出即可

相關(guān)文章

最新評論

榆林市| 浙江省| 信丰县| 万山特区| 梁山县| 锦州市| 张掖市| 平陆县| 洛南县| 富锦市| 彝良县| 隆德县| 英山县| 桂林市| 岳阳市| 宜宾县| 和顺县| 临江市| 鄂托克前旗| 莫力| 胶南市| 甘南县| 新密市| 韩城市| 莆田市| 邹城市| 丰县| 绩溪县| 贺兰县| 泾阳县| 雷波县| 蛟河市| 佛坪县| 淅川县| 晋宁县| 三明市| 肇庆市| 通州市| 儋州市| 边坝县| 南宁市|