android开发 获取相册名称_android通过拍照、相册获取图片并显示 实例完整源码下载(亲测通过)...

【实例简介】其中也包含了 将图片保存至 sd卡功能

【实例截图】

【核心代码】

public class MainActivity extends Activity{

private static final int PHOTO_WITH_DATA = 18; //从SD卡中得到图片

private static final int PHOTO_WITH_CAMERA = 37;// 拍摄照片

private Button btn_open;

private ImageView iv_temp;

private Dialog dialog_pic;

private String imgPath = "";

private String imgName = "";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

iv_temp = (ImageView) findViewById(R.id.imageView);

iv_temp.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

openPictureDialog();

}

});

btn_open = (Button) findViewById(R.id.btn_open);

btn_open.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

openPictureSelectDialog();

}

});

}

/**打开对话框**/

private void openPictureSelectDialog() {

//自定义Context,添加主题

Context dialogContext = new ContextThemeWrapper(MainActivity.this, android.R.style.Theme_Light);

String[] choiceItems= new String[2];

choiceItems[0] = "相机拍摄"; //拍照

choiceItems[1] = "本地相册"; //从相册中选择

ListAdapter adapter = new ArrayAdapter(dialogContext, android.R.layout.simple_list_item_1,choiceItems);

//对话框建立在刚才定义好的上下文上

AlertDialog.Builder builder = new AlertDialog.Builder(dialogContext);

builder.setTitle("添加图片");

builder.setSingleChoiceItems(adapter, -1, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

switch (which) {

case 0: //相机

doTakePhoto();

break;

case 1: //从图库相册中选取

doPickPhotoFromGallery();

break;

}

dialog.dismiss();

}

});

builder.create().show();

}

/**打开图片查看对话框**/

private void openPictureDialog() {

dialog_pic = new Dialog(MainActivity.this,R.style.simple_dialog);

LayoutInflater inflater = getLayoutInflater();

View view = inflater.from(MainActivity.this).inflate(R.layout.dialog_picture, null);

ImageView imgView = (ImageView) view.findViewById(R.id.img_weibo_img);

Button btnBig = (Button) view.findViewById(R.id.btn_big);

btnBig.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(MainActivity.this,ImgDisplayActivity.class);

imgPath = getApplicationContext().getFilesDir() "/" imgName;

intent.putExtra("imgUrl", imgPath); //将图片的路径传递过去

startActivity(intent);

}

});

dialog_pic.setContentView(view);

dialog_pic.show();

displayForDlg(imgView,imgPath,btnBig); //显示内容到dialog中

}

private void displayForDlg(ImageView imgView, String imgPath2,Button btnBig) {

imgView.setVisibility(View.VISIBLE);

btnBig.setVisibility(View.VISIBLE);

imgPath = getApplicationContext().getFilesDir() "/" imgName;

System.out.println("图片文件路径----------》" imgPath);

if(!imgPath.equals("")) {

Bitmap tempBitmap = BitmapFactory.decodeFile(imgPath);

imgView.setImageBitmap(tempBitmap);//显示图片

}

}

/**You will receive this call immediately before onResume() when your activity is re-starting.**/

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if(resultCode == RESULT_OK) { //返回成功

switch (requestCode) {

case PHOTO_WITH_CAMERA: {//拍照获取图片

String status = Environment.getExternalStorageState();

if(status.equals(Environment.MEDIA_MOUNTED)) { //是否有SD卡

Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() "/image.jpg");

imgName = createPhotoFileName();

//写一个方法将此文件保存到本应用下面啦

savePicture(imgName,bitmap);

if (bitmap != null) {

//为防止原始图片过大导致内存溢出,这里先缩小原图显示,然后释放原始Bitmap占用的内存

Bitmap smallBitmap = ImageTools.zoomBitmap(bitmap, bitmap.getWidth() / 5, bitmap.getHeight() / 5);

iv_temp.setImageBitmap(smallBitmap);

}

Toast.makeText(MainActivity.this, "已保存本应用的files文件夹下", Toast.LENGTH_LONG).show();

}else {

Toast.makeText(MainActivity.this, "没有SD卡", Toast.LENGTH_LONG).show();

}

break;

}

case PHOTO_WITH_DATA: {//从图库中选择图片

ContentResolver resolver = getContentResolver();

//照片的原始资源地址

Uri originalUri = data.getData();

//System.out.println(originalUri.toString()); //" content://media/external/images/media/15838 "

// //将原始路径转换成图片的路径

// String selectedImagePath = uri2filePath(originalUri);

// System.out.println(selectedImagePath); //" /mnt/sdcard/DCIM/Camera/IMG_20130603_185143.jpg "

try {

//使用ContentProvider通过URI获取原始图片

Bitmap photo = MediaStore.Images.Media.getBitmap(resolver, originalUri);

imgName = createPhotoFileName();

//写一个方法将此文件保存到本应用下面啦

savePicture(imgName,photo);

if (photo != null) {

//为防止原始图片过大导致内存溢出,这里先缩小原图显示,然后释放原始Bitmap占用的内存

Bitmap smallBitmap = ImageTools.zoomBitmap(photo, photo.getWidth() / 5, photo.getHeight() / 5);

iv_temp.setImageBitmap(smallBitmap);

}

// iv_temp.setImageURI(originalUri); //在界面上显示图片

Toast.makeText(MainActivity.this, "已保存本应用的files文件夹下", Toast.LENGTH_LONG).show();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

break;

}

}

}

super.onActivityResult(requestCode, resultCode, data);

}

/**从相册获取图片**/

private void doPickPhotoFromGallery() {

Intent intent = new Intent();

intent.setType("image/*"); // 开启Pictures画面Type设定为image

intent.setAction(Intent.ACTION_GET_CONTENT); //使用Intent.ACTION_GET_CONTENT这个Action

startActivityForResult(intent, PHOTO_WITH_DATA); //取得相片后返回到本画面

}

/**拍照获取相片**/

private void doTakePhoto() {

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //调用系统相机

Uri imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"image.jpg"));

//指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

//直接使用,没有缩小

startActivityForResult(intent, PHOTO_WITH_CAMERA); //用户点击了从相机获取

}

/**创建图片不同的文件名**/

private String createPhotoFileName() {

String fileName = "";

Date date = new Date(System.currentTimeMillis()); //系统当前时间

SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");

fileName = dateFormat.format(date) ".jpg";

return fileName;

}

/**获取文件路径**/

public String uri2filePath(Uri uri)

{

String[] projection = {MediaStore.Images.Media.DATA };

Cursor cursor = managedQuery(uri, projection, null, null, null);

int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

cursor.moveToFirst();

String path = cursor.getString(column_index);

return path;

}

/**保存图片到本应用下**/

private void savePicture(String fileName,Bitmap bitmap) {

FileOutputStream fos =null;

try {//直接写入名称即可,没有会被自动创建;私有:只有本应用才能访问,重新内容写入会被覆盖

fos = MainActivity.this.openFileOutput(fileName, Context.MODE_PRIVATE);

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);// 把图片写入指定文件夹中

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if(null != fos) {

fos.close();

fos = null;

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值