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实现仿微信朋友圈发布动态(拍照、图库选择、照片压缩、显示、保存、缩略图、点击缩略图删除对应文件等)附源码

原创作品,转载请注明出处: 最近项目需求中要用到类似微信朋友圈发布动态选择图片的UI效果,研究了一下,特来分享成果,多的不说来看代码。 Activity类 package com.whfp.cir...

Android 拍照,从图库选择照片,并裁剪,上传到服务器

整个例子的功能包括:通过照相机拍照,并把照片保存到SD卡中,或者通过图库选择图片。选择后,经过裁剪,再保存,显示,最后上传到服务器。内容知识点: 1、URI 分为两种: content 类型的 和...

Ionic调用摄像头拍照和选择图库照片功能的注意点

代码示例$scope.takePhoto=function(){ var options = { ...

上传文件之获取拍照照片和本地图库

// 上传图片 private CharSequence[] items = { "选择本地图片", "拍照" }; private final int SELECT_LOCAL = 0, SEL...

Android关于有些机型拍摄的照片在代码里调用图库照片显示翻转问题

有些机型我现在发现的有小米6和三星的机子,调用系统图库照片出现了翻转,但是在相册里却不会翻转,用户上传的图片显得很不友好,所以要想办法解决一下,查看了诸多的材料,下面的是我调用的工具类(代码里的注释写...

android图库中选择照片然后裁剪,完爆目前各种所谓的教学,看不懂你打我。

前阵子是打算做一个选择相册里的照片裁剪并上传的功能。 然后我就看了很多教程,看了网上很多文章,发现这些人都是在抄来抄去,里面很多细节和思路都没有写清楚。真是误人子弟又操蛋。 所以自己琢磨了一下代码...

android相机、图库获取照片,并实现两个手机对图像进行放大,缩小功能

之前做android开发,遇到从照相机、图库获取照片的问题,网上分享的有很多,但是都是比较杂乱的,而且很多的程序都是有问题的,在此针对手机图像的几种操作做一下总结: 1.相机获取图像: 2.从相机...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android拍照 图库照片本地显示
举报原因:
原因补充:

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