Android进阶之路
来源:互联网 发布:hadoop推荐算法 编辑:程序博客网 时间:2024/05/22 01:45
本篇讲的是获取我们相册的照片,用于展示,包含获取对应的图片的存放地址
在满足照片回传的同时,你还可以获取
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
细致分为三个案例(可相互独立,找自己需要的即可):
1.普通的相册照片回传,无其他要求
2.相册照片回传,获取对应的Uri 与 图片的绝对路径
3.通过已封装好的工具,快速实现以上操作
注意:
案例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:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" tools:context="com.example.dow.cameraphoto.MainActivity"> <TextView android:id="@+id/btn" android:gravity="center" android:padding="5dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="调用相册图片" /> <View android:layout_width="match_parent" android:layout_height="2dp" android:background="#ff0"/> /> <ImageView android:layout_width="match_parent" android:layout_weight="1" android:id="@+id/img" android:layout_height="0dp" /></LinearLayout>
案例 - 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 :
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" tools:context="com.example.dow.photoup.MainActivity"> <TextView android:layout_width="match_parent" android:gravity="center" android:layout_height="wrap_content" android:padding="5dp" android:id="@+id/btn" android:text="从相册调取图片" /> <TextView android:layout_width="match_parent" android:gravity="center" android:layout_height="wrap_content" android:padding="5dp" android:id="@+id/tv_uri" android:text="" /> <TextView android:layout_width="match_parent" android:gravity="center" android:layout_height="wrap_content" android:padding="5dp" android:id="@+id/tv_path" android:text="" /> <ImageView android:layout_width="match_parent" android:id="@+id/iv_bitmap" android:layout_height="match_parent" /></LinearLayout>
案例 - 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:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" tools:context="com.example.dow.photoup.MainActivity"> <TextView android:layout_width="match_parent" android:gravity="center" android:layout_height="wrap_content" android:padding="5dp" android:id="@+id/btn" android:text="从相册调取图片" /> <TextView android:layout_width="match_parent" android:gravity="center" android:layout_height="wrap_content" android:padding="5dp" android:id="@+id/tv_uri" android:text="" /> <TextView android:layout_width="match_parent" android:gravity="center" android:layout_height="wrap_content" android:padding="5dp" android:id="@+id/tv_path" android:text="" /> <ImageView android:layout_width="match_parent" android:id="@+id/iv_bitmap" android:layout_height="match_parent" /></LinearLayout>
最炫工具类来了,直接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; } } } }
1 0
- Android进阶之路
- android进阶之路
- Android 进阶之路
- Android 进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- Android进阶之路
- ssh免密登录及修改登录目录
- 比较Strtus2和SpringMVC的区别
- 基于YARA 和NESSUS 的威胁探测
- html学习笔记
- C++作业4
- Android进阶之路
- 系统的简单注解
- 安装ubuntu server的注意事项
- Java注解(Annotation)详解
- 跨线程访问 & 线程池
- 奇怪的order by
- 实验-4
- C++作业4
- centos7 修改yum源为阿里源