QQ与微信等社交软件都有上传图片/头像的功能。也可以直接把拍照得到的图片上传,很方便。
今天我就把我做的类似功能有大家分享一下。
1、权限
权限很简单就是应用程序读写创建文件的权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
2、取相册的图片并上传
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, PHOTO_PICK);
Intent.ACTION_PICK 代表从列表中选择某项并返回所选数据
MediaStore.Images.Media.EXTERNAL_CONTENT_URL 取得手机上的图片
PHOTO_PICK 是一个常量
3、取得拍摄的照片
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(picPath, picName)));
startActivityForResult(intent, PHOTO_CAMERA);
MediaStore.ACTION_IMAGE_CAPTURE 捕获图片
MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(picPath, picName)) 自定义输出位置
PHOTO_CAMERA 是一个常量
4、onActivityResult处理
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if ((requestCode == PHOTO_CAMERA || requestCode == PHOTO_PICK)) {// 图片返回
if (requestCode == PHOTO_PICK && data != null) { // 相册图片复制
Uri uri = data.getData(); // 获得图片的uri
String path = getImagePath(uri);
copyPic(path, picPath + File.separator + picName);
}
String path = picPath + File.separator + picName;
imageView.setImageDrawable(new BitmapDrawable(BitmapFactory.decodeFile(path)));
}
}
5、取得从相册中返回的的图片路径
private String getImagePath(Uri uri) {
String imagePath = "";
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
imagePath = cursor.getString(1); // 图片文件路径
} else if (cursor == null) {
imagePath = uri.toString().substring(7, uri.toString().length());
}
if (cursor != null)
cursor.close();
return imagePath;
}
6、复制图片到应用文件夹下(可不复制,直接引用原路径),就不在列出了。
效果如图:
图片我都是随便找的,所以丑爆了,望大家见谅!