博客
关于我
Android进阶之路 - 调用相册内照片
阅读量:658 次
发布时间:2019-03-15

本文共 9951 字,大约阅读时间需要 33 分钟。

本篇讲的是获取我们相册的照片,用于展示,包含获取对应的图片的存放地址

常见的图片选取方式分为俩种:

细致分为三个案例(可相互独立,找自己需要的即可):

  • 普通的相册照片回传,无其他要求
  • 相册照片回传,获取对应的Uri 与 图片的绝对路径
  • 通过已封装好的工具,快速实现以上操作

前期了解:

在满足照片回传的同时,你还可以获取Uri路径或绝对路径~

  • Uri路径:
uri = content://media/external/images/media/88484
  • 绝对路径:
path = /storage/emulated/0/Pictures/Screenshots/S70620-110151.jpg
  • 案例Log:
06-21 11:44:57.434 30071-30071/com.example.dow.photoup E/tag: uri = content://media/external/images/media/8848406-21 11:44:57.526 30071-30071/com.example.dow.photoup E/tag: path = /storage/emulated/0/Pictures/Screenshots/S70620-110151.jpg

注意:

案例2与案例3,MainAcitivity代码些许不同,Xml相同,案例3多了一个PhotoUtil的转换工具类

Effect 1:

这里写图片描述

案例 - 1

MainActivity:

package com.example.dow.cameraphoto;import android.content.ContentResolver;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.provider.MediaStore;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.ImageView;import android.widget.TextView;import java.io.FileNotFoundException;public class MainActivity extends AppCompatActivity {       private ImageView mImg;    private TextView mBtn;    @Override    protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mBtn = (TextView) findViewById(R.id.btn);        mImg = (ImageView) findViewById(R.id.img);        mBtn.setOnClickListener(new View.OnClickListener() {               @Override            public void onClick(View v) {                   startActivityForResult(new Intent(Intent.ACTION_PICK).setType("image/*"),0);            }        });    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {           super.onActivityResult(requestCode, resultCode, data);        ContentResolver contentResolver = getContentResolver();        Bitmap bitmap = null;        try {               bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(data.getData()));            Log.i("TAG", "从相册回传bitmap:"+bitmap);            mImg.setImageBitmap(bitmap);        } catch (FileNotFoundException e) {               e.printStackTrace();        }    }}

MainActivity Xml:

/>

案例 - 2

MainActivity :

package com.example.dow.photoup;import android.content.ContentResolver;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.media.ThumbnailUtils;import android.net.Uri;import android.os.Environment;import android.provider.MediaStore;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.ImageView;import android.widget.TextView;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;public class MainActivity extends AppCompatActivity {       private TextView mBtn;    private TextView mPath;    private TextView mUri;    private ImageView mImage;    @Override    protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();		initEvent();    }    private void initEvent() {           mBtn.setOnClickListener(new View.OnClickListener() {               @Override            public void onClick(View v) {                   //调用相册                startActivityForResult(new Intent(Intent.ACTION_PICK).setType("image/*"),0);            }        });    }    private void initView() {           mBtn = (TextView) findViewById(R.id.btn);        mPath = (TextView) findViewById(R.id.tv_path);        mUri = (TextView) findViewById(R.id.tv_uri);        mImage = (ImageView) findViewById(R.id.iv_bitmap);    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {           super.onActivityResult(requestCode, resultCode, data);        //应该是四大组件的内容提供者对应的内功接收者 ,必调方法        ContentResolver contentResolver = getContentResolver();        Bitmap bitmap = null;   try {           if(requestCode == 0){               //图片的U            Uri uri = data.getData();            Log.e("tag","uri = "+uri);            mUri.setText("Uri地址:"+uri);            //第一种方式 setImageBitmap(bitmap) - 与径相关            bitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri);            //返回图            mImage.setImageBitmap(bitmap);            //图片压缩比例- 如在我们回传的照片比较模糊,我们可以注释上一行代码 解开下面这行代码//            mImage.setImageBitmap(ThumbnailUtils.extractThumbnail(bitmap,100,100));            //第二种方式 setImageURI(uri) - 与Uri路径相关//            mImage.setImageURI(uri);            String[] proj  = {     MediaStore.Images.Media.DATA };            //android多媒体数据库的封装接口            Cursor cursor = managedQuery(uri, proj, null, null, null);            //图片角标  - 索引            int  column_index  =  cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);            //重置角标,防止越界            cursor.moveToFirst();            //  最后根据索引值获取图片路径            String path = cursor.getString(column_index);            Log.e("tag","path = "+path);            mPath.setText("Path地址:"+path);            }        } catch (FileNotFoundException e) {               e.printStackTra`e();        } catch (IOException e) {               e.printStackTrace();        }    }}

MainActivity Xml :

案例 - 3

MainActivity :

package com.example.dow.photoup;import android.content.ContentResolver;import android.content.Intent;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends AppCompatActivity {       private TextView mBtn;    private TextView mPath;    private TextView mUri;    private ImageView mImage;    @Override    protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initEvent();    }    private void initEvent() {           mBtn.setOnClickListener(new View.OnClickListener() {               @Override            public void onClick(View v) {                   //调用相册                startActivityForResult(new Intent(Intent.ACTION_PICK).setType("image/*"),0);            }        });    }    private void initView() {           mBtn = (TextView) findViewById(R.id.btn);        mPath = (TextView) findViewById(R.id.tv_path);        mUri = (TextView) findViewById(R.id.tv_uri);        mImage = (ImageView) findViewById(R.id.iv_bitmap);    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {           super.onActivityResult(requestCode, resultCode, data);        //应该是四大组件的内容提供者对应的内功接收者 ,必调方法        ContentResolver contentResolver = getContentResolver();        Bitmap bitmap = null;   try {           if(requestCode == 0){               //图片的U            Uri uri = data.getData();            Log.e("tag","uri = "+uri);            mUri.setText("Uri地址:"+uri);            //返回图片            mImage.setImageURI(uri);            //使用工具类获取绝对路径            String  path= PhotoUtil.getFilePathFromContentUri(uri, contentResolver);            Log.e("tag","path = "+path);            mPath.setText("Path地址:"+path);            }        } catch (Exception e) {               e.printStackTrace();        }    }}

MainActivity Xml:

最炫工具类来了,直接Copy!!!

photoUtil

package com.example.dow.photoup;import android.content.ContentResolver;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.net.Uri;import android.provider.MediaStore;/** * Created by YongLiu on 2017/6/21. */public class PhotoUtil {       /**     * Uri 转 绝对路径     * */      public  static  String  getFilePathFromContentUri(Uri selectedVideoUri, ContentResolver contentResolver)  {            String  filePath;             String[]  filePathColumn  =  {   MediaStore.MediaColumns.DATA};                     Cursor cursor  =  contentResolver.query(selectedVideoUri,  filePathColumn,  null,  null,  null);//            也可用下面的方法拿到cursor    //            Cursor  cursor  =  this.context.managedQuery(selectedVideoUri,  filePathColumn,  null,  null,  null);             cursor.moveToFirst();                     int  columnIndex  =  cursor.getColumnIndex(filePathColumn[0]);             filePath  =  cursor.getString(columnIndex);             cursor.close();             return  filePath;         }    /**     * 绝对路径 转 Uri     * */    public static Uri getImageContentUri(Context context, java.io.File imageFile) {            String filePath = imageFile.getAbsolutePath();           Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,                     new String[]{   MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=? ",             new String[]{   filePath}, null);           if (cursor != null && cursor.moveToFirst()) {                   int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));                Uri baseUri = Uri.parse("content://media/external/images/media");                return Uri.withAppendedPath(baseUri, "" + id);               } else {                   if (imageFile.exists()) {                        ContentValues values = new ContentValues();                   values.put(MediaStore.Images.Media.DATA, filePath);                     return context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);                    } else {                        return null;                    }               }      }  }

转载地址:http://gwglz.baihongyu.com/

你可能感兴趣的文章
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>
Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
查看>>
Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
查看>>
Mysql 学习总结(89)—— Mysql 库表容量统计
查看>>
mysql 实现主从复制/主从同步
查看>>
mysql 审核_审核MySQL数据库上的登录
查看>>
mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>
mysql 导入导出大文件
查看>>
MySQL 导出数据
查看>>
mysql 将null转代为0
查看>>
mysql 常用
查看>>
MySQL 常用列类型
查看>>
mysql 常用命令
查看>>
Mysql 常见ALTER TABLE操作
查看>>
MySQL 常见的 9 种优化方法
查看>>