android中打开相机、打开相册进行图片的获取示例

 更新时间:2017年01月13日 14:25:58   作者:木兰缀露  
本篇文章主要介绍了android中打开相机、打开相册进行图片的获取示例,非常具有实用价值,需要的朋友可以参考下。

这里介绍在Android中实现相机调取、拍照片、获取照片、存储新路径等已经打开相册、选择照片等功能

首先看一下界面,很简单

配置读取内存卡和调用照相头的功能

 <!-- 使用网络权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 写sd卡的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 读sd卡权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

下面是代码的主题

public class TakePhotos extends Activity implements
android.view.View.OnClickListener {
Button takePhoto;
Bitmap photo;
String picPath;
Button capture;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo);
takePhoto = (Button) findViewById(R.id.button1);
capture = (Button) findViewById(R.id.capture);
takePhoto.setOnClickListener(this);
capture.setOnClickListener(this);
}


@Override
public void onClick(View viewid) {
switch (viewid.getId()) {
case R.id.button1: {// 打开相机
String state = Environment.getExternalStorageState();// 获取内存卡可用状态
if (state.equals(Environment.MEDIA_MOUNTED)) {
// 内存卡状态可用
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, 1);
} else {
// 不可用
Toast.makeText(TakePhotos.this, "内存不可用", Toast.LENGTH_LONG)
.show();
}
break;
}
case R.id.capture: {// 打开相册
// 打开本地相册
Intent i = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
// 设定结果返回
startActivityForResult(i, 2);
break;
}
default:
break;
}
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {
switch (requestCode) {
case 1:
// 两种方式 获取拍好的图片
if (data.getData() != null || data.getExtras() != null) { // 防止没有返回结果
Uri uri = data.getData();
if (uri != null) {
this.photo = BitmapFactory.decodeFile(uri.getPath()); // 拿到图片
}
if (photo == null) {
Bundle bundle = data.getExtras();
if (bundle != null) {
photo = (Bitmap) bundle.get("data");
FileOutputStream fileOutputStream = null;
try {
// 获取 SD 卡根目录 生成图片并
String saveDir = Environment
.getExternalStorageDirectory()
+ "/dhj_Photos";
// 新建目录
File dir = new File(saveDir);
if (!dir.exists())
dir.mkdir();
// 生成文件名
SimpleDateFormat t = new SimpleDateFormat(
"yyyyMMddssSSS");
String filename = "MT" + (t.format(new Date()))
+ ".jpg";
// 新建文件
File file = new File(saveDir, filename);
// 打开文件输出流
fileOutputStream = new FileOutputStream(file);
// 生成图片文件
this.photo.compress(Bitmap.CompressFormat.JPEG,
100, fileOutputStream);
// 相片的完整路径
this.picPath = file.getPath();
ImageView imageView = (ImageView) findViewById(R.id.imageView1);
imageView.setImageBitmap(this.photo);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Toast.makeText(getApplicationContext(), "获取到了",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "找不到图片",
Toast.LENGTH_SHORT).show();
}
}
}
break;
case 2: {
//打开相册并选择照片,这个方式选择单张
// 获取返回的数据,这里是android自定义的Uri地址
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
// 获取选择照片的数据视图
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
// 从数据视图中获取已选择图片的路径
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
// 将图片显示到界面上
ImageView imageView = (ImageView) findViewById(R.id.imageView1);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
break;
}
default:
break;
}
}
}
}

注释的很详细,自己分析吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • ListView异步加载图片实现思路

    ListView异步加载图片实现思路

    用到ListView去加载数据,加载图片和文字是比较常见的,文字还好,图片从网络请求加载速度比较慢,以下是一个我在项目中使用到的异步加载图片的解决方案
    2013-04-04
  • Android单选按钮RadioButton的使用详解

    Android单选按钮RadioButton的使用详解

    今天小编就为大家分享一篇关于Android单选按钮RadioButton的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Android实现旋转,放大,缩小图片的方法

    Android实现旋转,放大,缩小图片的方法

    这篇文章主要介绍了Android实现旋转,放大,缩小图片的方法,结合实例形式分析了Android基于Drawable针对图片的缩放与旋转等处理技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • Android中WebView控件支持地理位置定位方法

    Android中WebView控件支持地理位置定位方法

    今天小编就为大家分享一篇Android中WebView控件支持地理位置定位方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Android SQLite数据库的增 删 查找操作

    Android SQLite数据库的增 删 查找操作

    这篇文章主要介绍了Android SQLite数据库的增 删 查找操作,需要的朋友可以参考下
    2017-02-02
  • Android中的ViewPager视图滑动切换类的入门实例教程

    Android中的ViewPager视图滑动切换类的入门实例教程

    Android中ViewPager通常与Fragments组件共同使用来实现视图切换功能,本文就带大家一起来学习Android中的ViewPager视图滑动切换类的入门实例教程:
    2016-06-06
  • Android handle-message的发送与处理案例详解

    Android handle-message的发送与处理案例详解

    这篇文章主要介绍了Android handle-message的发送与处理案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 浅谈Android RecyclerView 间距全适配

    浅谈Android RecyclerView 间距全适配

    本篇文章主要介绍了浅谈Android RecyclerView 间距全适配,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • android多媒体音乐(MediaPlayer)播放器制作代码

    android多媒体音乐(MediaPlayer)播放器制作代码

    这篇文章主要为大家详细介绍了android多媒体音乐(MediaPlayer)播放器的制作相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Android多种方式实现相机圆形预览的示例代码

    Android多种方式实现相机圆形预览的示例代码

    这篇文章主要介绍了Android多种方式实现相机圆形预览的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论