Android拍照 图库照片本地显示

原创 2016年06月02日 10:01:29
package com.example.photodemo;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Locale;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.ActionBarActivity;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity implements OnClickListener {

    private ImageView imageView;
    private Button buttonTake, buttonChoose;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.img_show);
        buttonTake = (Button) findViewById(R.id.btn_takePohto);
        buttonChoose = (Button) findViewById(R.id.btn_choosePohto);
        buttonTake.setOnClickListener(this);
        buttonChoose.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.btn_takePohto:
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, 1);
            break;
        case R.id.btn_choosePohto:
            Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

            startActivityForResult(i, 2);
            break;

        default:
            break;
        }
    }

    private Uri photoUri;
    private String path;

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {
        case 1:
            String sdStatus = Environment.getExternalStorageState();
            if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
                Log.i("TestFile",
                        "SD card is not avaiable/writeable right now.");
                return;
            }
            new DateFormat();
            String name = DateFormat.format("yyyyMMdd_hhmmss",
                    Calendar.getInstance(Locale.CHINA))
                    + ".jpg";
            Toast.makeText(this, name, Toast.LENGTH_LONG).show();
            Bundle bundle = data.getExtras();
            Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式

            FileOutputStream b = null;
            File file = new File("/sdcard/Image/");
            file.mkdirs();// 创建文件夹
            String fileName = "/sdcard/Image/" + name;
            try {
                b = new FileOutputStream(fileName);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } finally {
                try {
                    b.flush();
                    b.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                imageView.setImageBitmap(bitmap);// 将图片显示在ImageView里
            } catch (Exception e) {
                Log.e("error", e.getMessage());
            }
            break;
        case 2:
            if (resultCode == Activity.RESULT_OK) {
                if (data != null) {
                    photoUri = data.getData();
                }
                if (photoUri != null) {
                    String[] pojo = { MediaStore.Images.Media.DATA };
                    System.err.println(pojo[0] + "----pojo[0]----");
                    Cursor cursor = managedQuery(photoUri, pojo, null, null,null);
                    if (cursor != null) {
                        int columeIndex = cursor.getColumnIndexOrThrow(pojo[0]);
                        cursor.moveToFirst();
                        path = cursor.getString(columeIndex);
                        cursor.close();
                    }
                    Log.i("test", "imagePath = " + path);
                    if (path != null
                            && (path.endsWith(".png") || path.endsWith(".PNG")
                                    || path.endsWith(".jpg") || path.endsWith(".JPG"))) {
                        imageView.setImageBitmap(BitmapFactory.decodeFile(path));
                    }
                }
            }

            break;

        default:
            break;
        }

        /* */

    }
}

布局文件:

<LinearLayout 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"
    android:orientation="vertical"
    tools:context="com.example.photodemo.MainActivity" >

      <ImageView
          android:id="@+id/img_show"
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:scaleType="centerInside"
        android:padding="15dp"
        android:src="@drawable/ic_launcher" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        >
        <Button
        android:id="@+id/btn_takePohto"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="拍照"
        />
        <Button
        android:id="@+id/btn_choosePohto"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="选择"
        />
    </LinearLayout>


</LinearLayout>

权限:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-feature android:name = "android.hardware.camera" />
<uses-feature android:name = "android.hardware.camera.autofocus" />

Android 4.4以上拍照或者从图库选择图片,获取图片路径

Android 4.4以上拍照或者从图库选择图片,获取图片路径 最近在做一个从图库选择图片或拍照,然后裁剪的功能.本来是没问题的,一直在用 Intent intent=new Inte...
  • superbigcupid
  • superbigcupid
  • 2016年04月21日 15:43
  • 3629

Android设置拍照或者上传本地图片

效果如下: 看代码: MainActivity类中: package com.example.ceshidemo; import java.io.ByteArrayOutputStream; ...
  • onceing
  • onceing
  • 2015年07月09日 15:08
  • 6599

android 调用系统照相机拍照后保存到系统相册,在系统图库中能看到

android 调用系统照相机进行拍照,并且保存到系统相册,调用系统相册的时候能看到。...
  • JM_beizi
  • JM_beizi
  • 2015年03月18日 14:39
  • 4937

Android 使用系统相机拍摄照片保存到本地并在系统相册中显示

这是我的第一篇博客文章,一直获取别人的劳动成果,今天开始我也要分享我的劳动成果给大家。这篇博客主要探讨使用Android 手机自带相机拍摄照片并把照片保存到本地,并通过广播通知系统相册进行更新图片,这...
  • wukj_litai
  • wukj_litai
  • 2016年04月06日 16:44
  • 4127

Android Demo:读取本地图库与调用摄像头拍摄

本文主要介绍如何读取Android本地图库的图片以及调用安卓的摄像头进行拍摄。 一、布局 布局比较简单,MainActviivty的布局文件只有两个按钮,一个是读取图库的,另一个是打开摄像...
  • a553181867
  • a553181867
  • 2016年03月05日 23:41
  • 1753

HTML5调用照相机并自定义显示获取到的图片(FileReader)

越来越多的移动端网页流行,在手机上拍摄照片或者从相册中选取照片并上传的功能不可或缺。本文以实例说明上述功能如何实现,并介绍FileReader对象。...
  • joyce_lcy
  • joyce_lcy
  • 2017年09月07日 19:09
  • 692

Android 调用系统摄像头拍照保存并且更新到图库

首先要添加权限
  • wu996489865
  • wu996489865
  • 2016年01月12日 11:27
  • 2848

Android 实现调用照相机和选取本地照片功能

Android 实现调用照相机和选取本地照片功能 这里主要贴出activity代码 组价添加连个按钮,一个ImageView package com.example.camera; impor...
  • Momentyol
  • Momentyol
  • 2015年12月03日 20:29
  • 2374

android拍照与相册选择照片并保存本地

最近项目中有用到拍照与相册选择照片并保存本地的操作,在网上查看了很多的例子,然后进行了总结,还算基本满足了自己的需求,所以今天在这里做一个总结,将相关知识点总结出来免得忘记(人老了记性不好 =。=)。...
  • TobeStrong_csdn
  • TobeStrong_csdn
  • 2016年06月14日 21:51
  • 4515

Android之本地相册图片选取和拍照以及图片剪辑

转载请注明出处: 相信有很多Android开发人员在日常开发中,由于项目需求,需要我们的APP能够从相册中选取图片并剪辑,以及拍照剪辑后上传的功能。如果之前你没有做过这个功能,刚开始做的时候可能会...
  • LoveYaozu
  • LoveYaozu
  • 2016年04月15日 16:26
  • 4387
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android拍照 图库照片本地显示
举报原因:
原因补充:

(最多只允许输入30个字)