`
喧嚣求静
  • 浏览: 572715 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android 选择图片(从手机照相机或手机图片)

阅读更多

package com.app.imagechooser;

import java.io.File;

import android.app.Activity;
import android.app.AlertDialog;

import android.content.DialogInterface;
import android.content.Intent;

import android.database.Cursor;
import android.provider.MediaStore;
import android.net.Uri;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import android.os.Bundle;
import android.os.Environment;

import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.Button;

/**
 * This example shows how to create and handle image picker in Android.
 * 
 * @author Lorensius W. L. T <lorenz@londatiga.net>
 *
 */
public class MainActivity extends Activity {
	private Uri mImageCaptureUri;
	private ImageView mImageView;	
	
	private static final int PICK_FROM_CAMERA = 1;
	private static final int PICK_FROM_FILE = 2;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.main);
        
        final String [] items			= new String [] {"From Camera", "From SD Card"};				
		ArrayAdapter<String> adapter	= new ArrayAdapter<String> (this, android.R.layout.select_dialog_item,items);
		AlertDialog.Builder builder		= new AlertDialog.Builder(this);
	//android.R.layout.select_dialog_item 这是android内置布局	
		builder.setTitle("Select Image");
		builder.setAdapter( adapter, new DialogInterface.OnClickListener() {
			public void onClick( DialogInterface dialog, int item ) {
				if (item == 0) {
					Intent intent 	 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
					File file		 = new File(Environment.getExternalStorageDirectory(),
							   			"tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg");
					mImageCaptureUri = Uri.fromFile(file);

					try {			
						intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
						intent.putExtra("return-data", true);
						
						startActivityForResult(intent, PICK_FROM_CAMERA);
					} catch (Exception e) {
						e.printStackTrace();
					}			
					
					dialog.cancel();
				} else {
					Intent intent = new Intent();
					
	                intent.setType("image/*");
	                intent.setAction(Intent.ACTION_GET_CONTENT);
	                
	                startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE);
				}
			}
		} );
		
		final AlertDialog dialog = builder.create();
		
		mImageView = (ImageView) findViewById(R.id.iv_pic);
		
		((Button) findViewById(R.id.btn_choose)).setOnClickListener(new View.OnClickListener() {			
			@Override
			public void onClick(View v) {
				dialog.show();
			}
		});
    }
    
    @Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	    if (resultCode != RESULT_OK) return;
	   
		Bitmap bitmap 	= null;
		String path		= "";
		
		if (requestCode == PICK_FROM_FILE) {
			mImageCaptureUri = data.getData(); 
			path = getRealPathFromURI(mImageCaptureUri); //from Gallery 
		
			if (path == null)
				path = mImageCaptureUri.getPath(); //from File Manager
			
			if (path != null) 
				bitmap 	= BitmapFactory.decodeFile(path);
		} else {
			path	= mImageCaptureUri.getPath();
			bitmap  = BitmapFactory.decodeFile(path);
		}
			
		mImageView.setImageBitmap(bitmap);		
	}
	
	public String getRealPathFromURI(Uri contentUri) {
        String [] proj 		= {MediaStore.Images.Media.DATA};
        Cursor cursor 		= managedQuery( contentUri, proj, null, null,null);
        
        if (cursor == null) return null;
        
        int column_index 	= cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        
        cursor.moveToFirst();

        return cursor.getString(column_index);
	}
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp">
    
	<TextView  
    	android:layout_width="fill_parent" 
    	android:layout_height="wrap_content" 
    	android:text="Android Image Choose Example"/>
    	
	<Button 
		android:id="@+id/btn_choose"
		android:text="Choose Image" 		 
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"
		android:layout_marginTop="10dp"/>
		
	<ImageView 
		android:id="@+id/iv_pic"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"		
		android:layout_marginTop="10dp"/>
		
</LinearLayout>
分享到:
评论
1 楼 xici_magic 2011-11-29  
多谢分享啦 看看

相关推荐

    office2john的源文件

    office2john的源文件

    青海省各市、县区及街镇SVG图

    青海省各市、县区及街镇SVG图

    (源码)基于JavaNIO框架的网络IO处理系统.zip

    # 基于Java NIO框架的网络IO处理系统 ## 项目简介 本项目是一个基于Java NIO(非阻塞IO)框架的网络IO处理系统。通过使用Java NIO的多路复用技术,系统能够高效地处理多个客户端的连接和IO操作。项目涵盖了从基本的Socket编程到复杂的NIO多路复用实现,适合学习和理解Java网络编程的高级特性。 ## 项目的主要特性和功能 1. 多路复用技术使用Java NIO的Selector机制,实现单线程处理多个客户端的连接和IO操作。 2. 多线程处理通过多线程技术,系统能够并发处理多个客户端的请求,提高服务器的处理能力。 3. 文件IO操作包括基本的文件写入、缓冲文件IO、随机访问文件写入等操作,展示了Java文件IO的多种实现方式。 4. 网络IO操作包括Socket客户端和服务器的实现,展示了如何使用Java进行网络通信。

    数据结构- C语言版-树的遍历代码

    二叉树先、中、后序遍历及层次遍历代码 C90版

    支持向量机 - SVM支持向量机

    支持向量机

    (源码)基于Arduino和Android的温湿度数据采集系统.zip

    # 基于Arduino和Android的温湿度数据采集系统 ## 项目简介 本项目是一个基于Arduino和Android的温湿度数据采集系统,主要用于远程监控环境中的温湿度数据。系统由Arduino Nano控制DHT22传感器进行数据采集,并通过USRWIFI232A模块将数据传输到Android设备。Android端通过WiFi连接到服务器,实时读取并显示温湿度数据。 ## 项目的主要特性和功能 硬件设计 使用Arduino Nano作为主控芯片。 采用DHT22传感器进行温湿度数据采集。 通过USRWIFI232A模块实现无线数据传输。 软件设计 Arduino端实现DHT传感器的读取功能,包括温度和湿度的数据采集与处理。 Android端开发了一个Android应用,通过WiFi连接到服务器,实时读取并显示温湿度数据。 功能模块

    c语言情人节的红玫瑰.rar

    c语言情人节的红玫瑰

    c语言UDP传输系统源码.rar

    c语言UDP传输系统源码

    数字标识控件.zip

    数字标识控件

    c语言打字母游戏源码.rar

    c语言打字母游戏源码

    c语言实现数字雨.rar

    c语言实现数字雨

    android Gallery实现异步加载网络图片 并只加载当前停止页面图.zip

    android Gallery实现异步加载网络图片 并只加载当前停止页面图

    C#ASP.NET手机端H5会议室预约系统源码 手机版会议室预约源码数据库 SQL2008源码类型 WebForm

    ASP.NET手机端H5会议室预约系统源码 手机版会议室预约源码 一、源码介绍 H5手机版会议室预约系统是一个高效快速便利的内部预约平台,让需要预定会议室的人能通过这个平 台发布预定,没有预定的人也能通过平台查看他人预定。通过后台添加账号即可登录预约平台,发布会 议室预定。 二、主要功能 后台管理包括 会议室信息管理,预约信息管理,用户信息管理。 前台手机版预约系统包括 日历查看预定信息,点击进入所选日期详细预约信息,预定会议室,我的预 约等功能模块。 后台采用模型管理功能可以使用后台对表结构进行维护,方便二次开发。 后台也可以增加部门,实现各部门之间管理员查看各自部门预约信息,用户信息等功能。

    九州仙侠传2砸蛋系统以及各类修复带数据库

    修复了实时获取区服 修复多区识别问题 带CDK功能 还有一些 忘记了 1年前修复的 好久没搞了

    C#ASP.NET教育培训管理系统源码数据库 Access源码类型 WinForm

    ASP.NET教育培训管理系统源码 一、源码描述:可以实现学员发卡,学员缴费,学员上课,教师管理,课程管理,图书管理, 水晶报表查询,文字与图形并存,管理员权限设置,学员生日提醒,图书逾期提醒。 二、菜单功能 1、 学员管理 2、 教师管理 3、 课程管理 4、 图书管理 5、 统计报表 6、 辅助功能 7、 系统设置 8、 添加学员 9、 学员上课 10、图书借阅 11、今日提醒 12、短信平台 13、微信平台 14、数据清理 三、注意事项 1、开发环境为Visual Studio 2010,数据库为ACCESS,使用.net 4.0开发, C/S架构。 2、管理员登陆名:admin 密码: admin

    考研真题及讲解介绍-数学-2024

    考研真题及讲解介绍-数学-2024

    c语言做的一个任务管理器.rar

    c语言做的一个任务管理器

    c语言学生信息系统.rar

    c语言学生信息系统

    个人练习-练习版内网通?

    大致思路以及代码

Global site tag (gtag.js) - Google Analytics