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>
分享到:
相关推荐
在Android开发中,用户往往需要在应用中上传或选择图片,这涉及到系统相册的访问以及拍照功能的集成。本文将详细讲解如何在Android应用中实现单张或多张图片的选择,以及如何支持从相册选取和使用相机拍摄。 首先,...
1. **图片选择**:TakePhoto提供了简洁的API接口,允许用户从手机相册中选择图片。它支持多种图片选择模式,如单选或多选,可以根据应用的需求进行配置。 2. **拍照功能**:用户可以直接调用相机进行拍照,...
本项目标题为“android照相机相册选择,可以多选”,说明它实现了在Android平台上让用户能够通过自定义的方式,不仅能够使用相机拍摄照片,还能够从相册中选取多张图片,并且具备删除已选择图片的功能。这一特性极大...
使用超级方便,轻松配置各种特性 1.适配安卓各种系统,支持android 11 2.图片过大不会引起 oom 3.动态获取系统权限, ...8.支持一些常用场景设置:如:是否裁剪、是否预览图片、是否裁剪、是否显示相机、图片是否压缩等
在Android开发中,图片选择和拍照是常见的功能需求,尤其对于社交、相册类应用更是不可或缺。本篇文章将深入探讨一款适用于Android原生环境的图片选择及拍照第三方库——PhotoPicker,它能很好地适配多个Android系统...
在Android开发中,用户经常需要上传或选择图片,例如在社交应用中分享照片或在电商应用中上传商品图片。这个过程通常涉及到两个主要的操作:拍照和从手机相册选取图片。接下来,我们将深入探讨如何在Android应用中...
本文将深入探讨如何利用ZXing库在Android应用程序中实现扫描和生成条码及二维码,并且如何支持用户从手机相册选择图片进行识别。 首先,我们要理解ZXing的核心功能。ZXing库提供了多种编码和解码的接口,支持多种...
在Android平台上,开发一款能拍照、选择相册图片并上传至服务器的应用程序是一个常见的需求。这个"Android相机、相册图片上传程序"包含了客户端和服务器端的实现,旨在提供一个可运行的解决方案。下面我们将详细探讨...
《Android图片选择器详解》 在移动应用开发中,用户对于图片的选取、拍摄和裁剪功能需求日益增强。Android图片选择器就是为满足这一需求而设计的组件,它简化了开发者集成这些功能的过程,提供了丰富的自定义选项,...
在Android应用开发中,获取用户设备上的图片或者通过相机拍摄新照片是常见的需求。随着Android系统的不断升级,尤其是从Android 4.4(KitKat)开始引入的存储权限管理变化,开发者需要采取不同的策略来适配不同的...
android相机拍照直接选取图片固然方便,但是更多的时候,我们需要从手机已有的图片中选择一张来使用。这次就练习如何从相册中选择图片吧。 首先在 activity_main.xml 文件中增加一个 Button,用来触发从相册中选择...
在Android应用开发中,图片上传是一...以上就是Android图片上传功能的实现涉及的关键知识点,包括图片选择、预览、缩放、拍照、处理、上传以及错误和权限管理。实际开发中,还需要结合具体需求和性能优化策略进行调整。
首先,关于应用的选择,不同版本的Android手机拍摄全景图片的方式有所不同。对于Android 4.2及以上版本的手机,推荐使用手机内置的原生相机全景模式,这通常在系统相机应用中可以找到。而对于Android 4.2以下版本的...
本示例项目"Android 仿微信选择图片,上传图片"旨在帮助开发者实现类似的功能,让用户可以从手机相册中选取图片,并能上传到服务器。下面我们将详细探讨这一过程中的关键知识点。 1. **权限申请**: 在Android 6.0...
微信的图片选择功能允许用户从手机相册中选取多张图片。在Android中,我们可以使用Intent来启动系统的图库应用,让用户选择图片。通过设置Intent的数据类型为`image/*`,并使用`ACTION_PICK`或`ACTION_GET_CONTENT`...
在移动应用开发中,特别是在Android和iOS平台上,允许用户通过内置的相机功能拍摄照片或从相册中选择图片作为头像是一个常见的需求。这个小工具就是为此目的设计的,它为用户提供了一个简单、直观的界面来操作这两种...
调用Android系统拍照功能后,三星手机拍摄后的照片被旋转了90度,横着拍给你变成竖的,竖的拍给你变成横的。其它品牌的手机都是正常的,就三星出现这个怪事。 在Android适配上,我原来一直以为国内的小米手机够奇葩...
这个库主要为用户提供两种方式获取图片:一是从手机相册中选择,二是直接通过相机进行拍摄。这两种方式都旨在提供无缝的用户体验,使用户能够在应用中方便快捷地获取所需的图片。 对于相册选择,PhotoPicker支持...
在Android应用开发中,微信图片选择器是一种常见的功能,它允许用户从手机相册中选择图片或者通过相机拍摄新照片。这个"Android 仿微信图片选择器"是为实现这一功能而设计的一个自定义组件。它具有高度可定制性,...