Android从相册中获取图片以及路径_wangyaqian1212的博客-程序员宅基地

首先是相册图片的获取:

 

private final String IMAGE_TYPE = "image/*";

private final int IMAGE_CODE = 0;   //这里的IMAGE_CODE是自己任意定义的

 

//使用intent调用系统提供的相册功能,使用startActivityForResult是为了获取用户选择的图片

 

Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);

getAlbum.setType(IMAGE_TYPE);

startActivityForResult(getAlbum, IMAGE_CODE);

 

//重写onActivityResult以获得你需要的信息

 

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data){

    if (resultCode != RESULT_OK) {        //此处的 RESULT_OK 是系统自定义得一个常量

        Log.e(TAG,"ActivityResult resultCode error");

        return;

    }

 

    Bitmap bm = null;

 

    //外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口

    ContentResolver resolver = getContentResolver();

 

    //此处的用于判断接收的Activity是不是你想要的那个

    if (requestCode == IMAGE_CODE) {

        try {

            Uri originalUri = data.getData();        //获得图片的uri 

 

            bm = MediaStore.Images.Media.getBitmap(resolver, originalUri);        //显得到bitmap图片

 

这里开始的第二部分,获取图片的路径:

 

            String[] proj = {MediaStore.Images.Media.DATA};

 

            //好像是Android多媒体数据库的封装接口,具体的看Android文档

            Cursor cursor = managedQuery(originalUri, proj, null, null, null); 

            //按我个人理解 这个是获得用户选择的图片的索引值

            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

            //将光标移至开头 ,这个很重要,不小心很容易引起越界

            cursor.moveToFirst();

            //最后根据索引值获取图片路径

            String path = cursor.getString(column_index);

        }catch (IOException e) {

            Log.e(TAG,e.toString()); 

        }

    }

}

点击添加  按钮选择一张图片,显示效果如下:图片下方为图片的绝对路径以及名字


1.Activity源码:

package com.jun.activity;

import Java.io.IOException;

import android.NET.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class PictureActivity extends Activity {
    private final String IMAGE_TYPE = "image/*";

    private final int IMAGE_CODE = 0;   //这里的IMAGE_CODE是自己任意定义的
    
    private Button addPic=null,showPicPath=null;
    
    private ImageView imgShow=null;
    
    private TextView imgPath=null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_picture);
        init();
    }

    private void init() {
        // TODO Auto-generated method stub
        
        addPic=(Button) findViewById(R.id.btnClose);
        showPicPath=(Button) findViewById(R.id.btnSend);
        imgPath=(TextView) findViewById(R.id.img_path);
        imgShow=(ImageView) findViewById(R.id.imgShow);
        
        addPic.setOnClickListener(listener);
        
        showPicPath.setOnClickListener(listener);
        
    }
private OnClickListener listener=new OnClickListener(){

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        
        
        Button btn=(Button) v;
        
        switch(btn.getId()){
        
        case R.id.btnClose:
            setImage();
            break;
            
    case R.id.btnSend:
        
            break;
        }
        
    }

    

    private void setImage() {
        // TODO Auto-generated method stub
         //使用intent调用系统提供的相册功能,使用startActivityForResult是为了获取用户选择的图片

        

        Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);

        getAlbum.setType(IMAGE_TYPE);

        startActivityForResult(getAlbum, IMAGE_CODE);
        
        
    }};
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_picture, menu);
        return true;
    }
    
     protected void onActivityResult(int requestCode, int resultCode, Intent data){

            if (resultCode != RESULT_OK) {        //此处的 RESULT_OK 是系统自定义得一个常量

                Log.e("TAG->onresult","ActivityResult resultCode error");

                return;

            }

        

            Bitmap bm = null;

        

            //外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口

            ContentResolver resolver = getContentResolver();

        

            //此处的用于判断接收的Activity是不是你想要的那个

            if (requestCode == IMAGE_CODE) {

                try {

                    Uri originalUri = data.getData();        //获得图片的uri

        

                    bm = MediaStore.Images.Media.getBitmap(resolver, originalUri);        
                    //显得到bitmap图片
                    imgShow.setImageBitmap(bm);
                    

//    这里开始的第二部分,获取图片的路径:

        

                    String[] proj = {MediaStore.Images.Media.DATA};

        

                    //好像是android多媒体数据库的封装接口,具体的看Android文档

                    Cursor cursor = managedQuery(originalUri, proj, null, null, null);

                    //按我个人理解 这个是获得用户选择的图片的索引值

                    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

                    //将光标移至开头 ,这个很重要,不小心很容易引起越界

                    cursor.moveToFirst();

                    //最后根据索引值获取图片路径

                    String path = cursor.getString(column_index);
                    imgPath.setText(path);
                }catch (IOException e) {

                    Log.e("TAG-->Error",e.toString());

                }

            }

        }
}

2.xml布局文件


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

   <RelativeLayout
        android:id="@+id/rlTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/titlebar_bg_nor" >

        <Button
            android:id="@+id/btnClose"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/bg_btn"
            android:paddingBottom="2dp"
            android:text="@string/Add"
            android:textColor="#fff"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/picture_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
           android:text="@string/picture_title"
            android:textColor="#000"
            android:textSize="20sp"
            android:textStyle="bold" />

        <Button
            android:id="@+id/btnSend"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="6dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/bg_btn"
            android:paddingBottom="2dp"
            android:text="@string/show"
            android:textColor="#fff"
            android:textSize="12sp" />
    </RelativeLayout>
    
   <ImageView
       android:id="@+id/imgShow"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_margin="15dip"
       android:background="@drawable/bg_img_coner"
       android:src="@drawable/b"
         android:layout_below="@+id/rlTitle"
       android:scaleType="fitXY"
       />
    
   <TextView
       android:id="@+id/img_path"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_below="@+id/imgShow"
       android:layout_margin="15dip"
       android:hint="图片路径"
      />

</RelativeLayout>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangyaqian1212/article/details/52985045

智能推荐

自己手写实现Dubbo_weixin_30357231的博客-程序员宅基地

目录 dubbo 简单介绍 为什么手写实现一下bubbo? 什么是RPC? 接口抽象 服务端实现 注册中心 消费者端: dubbo 简单介绍dubbo 是阿里巴巴开源的一款分布式rpc框架。为什么手...

ORA-00600: internal error code, arguments: [ktrgcm_3]_Rhys-Oracle的博客-程序员宅基地_internal error code, arguments: [ktfbnb_clean_ffb-

ORA-00600: internal error code, arguments: [ktrgcm_3]本来今天晚上我打算进行oracle数据字典深入研究的,但是在我马上要研究完的时候收到在北京的一个朋友的消息,说是 他们的生成库出问题了,让我看一下帮忙解决一下,我是非常高兴的,帮助别人是我的快乐,同样也提高了自己,特此在此时此刻记录一下,写完这篇日志在继续我的研究。trace日志信

events.js:183 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE :::8080_八点二十四分的博客-程序员宅基地

events.js:183 throw er; // Unhandled 'error' event ^Error: listen EADDRINUSE :::8080 at Object._errnoException (util.js:1024:11) at _exceptionWithHostPort (util.js:1046:20) ...

java单例模式的最佳实现!_jianhaojiang的博客-程序员宅基地

前言大致的了解了一下单例模式的实现,经供参考!常见实现(懒汉和饿汉)懒汉式单例模式/** * 懒汉式,先不创建实例,等到需要时在创建。 * 多线程情况下并发效率低。 * 结论:线程安全,调用效率不高,但是可以延时加载。 */public class LazySingleton { /** * 静态实例变量 */ private static L...

【Python Tkinter组件】——做一个简单常规的登录页面_小木_.的博客-程序员宅基地_tkinter登录界面

做一个非常简单的登录页面,附加练习文件,都打包好了,免费拿走,里面有源文件、图片,而且我也把打包好了的文件也放到里面了,供大家学习点个赞留个关注吧!!练习素材:提取码:2rn1 练习素材 点击直接下载导入模块import tkinterfrom tkinter import *import tkinter as tkfrom tkinter import messagebox添加标题,固定窗口大小及位置,附加程序的图标,图标进行选用ico格式的图标,可加可不加roo

随便推点

mini2440移植linux-3.4.2内核详细解说_dieling4341的博客-程序员宅基地

mini2440移植linux-3.4.2内核详细解说 MINI2440开发板硬件环境nor flash型号:SST39VF1601nand flash型号:K9F1208网卡型号:DM9000E内核分区:4MBcd /work/syste...

关于C++ const 的全面总结_skyereeee的博客-程序员宅基地

源地址:http://blog.csdn.net/Eric_Jo/article/details/4138548 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。

Java BeanUtils组件使用(Date类型转换)_Running-Waiting的博客-程序员宅基地_beanutil转换date

JavaBean定义了一组规则JavaBean就是遵循此规则的平常的Java对象 ,可以理解为一种规范,它有效降低了代码的重复性,提高复用性。它具有以下特性:1、易于维护、使用、编写。2、可实现代码的重用性。3、可移植性强,但仅限于Java工作平台。4、便于传输,不限于本地还是网络。5、 可以以其他部件的模式进行工作。在这里重点看一下它的日期类型转换1、注册日期类型转换器,自定...

Spring boot + Sharding JDBC 分库分表 及 分布式事务处理_、楽.的博客-程序员宅基地_shardingjdbc事务处理

Sharding JDBC 基础概念Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。Apache ShardingSphere 旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型

html blog高亮_xmq_197612的博客-程序员宅基地

写新文章 文章类型: 原创 转贴 翻译 文章分类:[ 管理分类… ] Tag: 文章标题: 文章正文:(推荐使用CSDN Best4c 画出博客中需要的图

推荐文章

热门文章

相关标签