本地媒体库或者拍照 都是调用系统本身的功能,
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
所以直接startActivityForResult就能浏览媒体库或者拍照,然后就是要获得返回的数据,直接调用onActivityResult即可,这只是基本的思路,实际操作并不是这么简单。
首先是启动媒体库部分
private void getPictureFormLocal()
{
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
//用来表明intent只能被openFileDescriptor(Uri, String)打开
intent.addCategory(Intent.CATEGORY_OPENABLE);
//intent.setType(“audio/*”); //选择音频
//intent.setType(“video/*”); //选择视频
//intent.setType(“video/*;image/*”);//同时选择视频和图片
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "选择图片来源"),
GET_PHOTO_FROM_LOCAL);
}
然后是启动照相机拍照
private void getPictureFromCamera()
{
//检查SDCard是否存在
String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED))
{
try
{
File dir = new File(photopath);
if (!dir.exists())
dir.mkdirs();
Intent intent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
path = photopath + getPhotoFileName();
File f = new File(path);
Uri u = Uri.fromFile(f);
intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
intent.putExtra(MediaStore.EXTRA_OUTPUT, u);
startActivityForResult(intent, GET_PHOTO_FROM_CAMERA);
}
catch (ActivityNotFoundException e)
{
Toast.makeText(MainActivity.this, "没有找到储存目录", Toast.LENGTH_LONG).show();
}
}
else
{
Toast.makeText(MainActivity.this, "没有储存卡", Toast.LENGTH_LONG).show();
}
}
最后是在onActivityResult中得到bitmap
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
Log.i(TAG, "in onActivityResult");
if (resultCode == RESULT_OK)
{
Bitmap bp = null;
switch (requestCode)
{
case GET_PHOTO_FROM_CAMERA :
bp = BitmapFactory.decodeFile(path);
break;
case GET_PHOTO_FROM_LOCAL :
Uri uri = data.getData();
Log.i(TAG, "uri == " + uri);
try
{
bp = BitmapFactory.decodeStream(resolver.openInputStream(uri));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
Log.i(TAG, "bp == " + bp.toString());
break;
}
imageView.setImageBitmap(bp);
}
super.onActivityResult(requestCode, resultCode, data);
}
大概思路就是这个样子