安卓项目,实现拍照上传,获取本地相册图片功能。
打印日志后发现 imagePath = null,意思就是获取本地图片路径失败,因为拍照上传和获取相册这是网上找的个Demo,结果其他的功能都挺好使,只有相册图片获取不到,很是愁人,经过一番百度,找到了一个解决方式,这个解决方式较为简单,以至于我都没想到能管用,那就是将代码中的
/***
* 从相册中取图片
*/
private void pickPhoto() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO);
}
此处的 intent.setAction(Intent.ACTION_GET_CONTENT);
修改为 intent.setAction(Intent.ACTION_PICK);
OK,大工干成。
Android4.3或以下的系统可以直接用ACTION_GET_CONTENT的, 在4.4或以上,最好改用其他的,比如ACTION_PICK,
虽然不太懂具体原因,先记录一下。
以下为代码:
/***
* 从相册中取图片
*/
private void pickPhoto() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_PICK);
startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
finish();
return super.onTouchEvent(event);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == Activity.RESULT_OK)
{
doPhoto(requestCode,data);
}
super.onActivityResult(requestCode, resultCode, data);
}
/**
* 选择图片后,获取图片的路径
* @param requestCode
* @param data
*/
private void doPhoto(int requestCode,Intent data)
{
if(requestCode == SELECT_PIC_BY_PICK_PHOTO )
{
if(data == null)
{
Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show();
return;
}
photoUri = data.getData();
if(photoUri == null )
{
Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show();
return;
}
}
String[] pojo = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(photoUri, pojo, null, null,null);
if(cursor != null )
{
int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);
cursor.moveToFirst();
picPath = cursor.getString(columnIndex);
cursor.close();
Log.i(TAG,"columnIndex:"+columnIndex);
}
Log.i(TAG, "imagePath = "+picPath);