关闭

上传头像

311人阅读 评论(0) 收藏 举报
分类:

目前关于上传头像的应用用的非常频繁。比如滴滴快车,神州专车的个人信息中就有这样的需求。

对于头像的上传是相机拍照和保存相册的典型应用,为了更好的理解究竟用到了那些技术,这里一一介绍。

1:调用相机的功能;

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 调用android自带的照相机
// photoUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
startActivityForResult(intent, 1);

2:调用相册的功能:

Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);// 调用android的图库
startActivityForResult(i, 2);

3:保存相册的功能:

String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
// 检测sd是否可用
Log.v("TestFile",
"SD card is not avaiable/writeable right now.");
return;
}
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式
FileOutputStream b = null;
File file = new File("/sdcard/myImage/");
file.mkdirs();// 创建文件夹,名称为pk4fun //
// 照片的命名,目标文件夹下,以当前时间数字串为名称,即可确保每张照片名称不相同。网上流传的其他Demo这里的照片名称都写死了,则会发生无论拍照多少张,后一张总会把前一张照片覆盖。细心的同学还可以设置这个字符串,比如加上“IMG”字样等;然后就会发现sd卡中myimage这个文件夹下,会保存刚刚调用相机拍出来的照片,照片名称不会重复。
String str = null;
Date date = null;
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");// 获取当前时间,进一步转化为字符串
date = new Date(resultCode);
str = format.format(date);
String fileName = "/sdcard/myImage/" + str + ".jpg";


try {
b = new FileOutputStream(fileName);
/*
* BufferedOutputStream bos = new BufferedOutputStream( new
* FileOutputStream(file));
*/
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件


} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* Intent intent = new Intent(
* Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); Uri uri =
* Uri.fromFile(file); intent.setData(uri);
* sendBroadcast(intent);
*///
// sendBroadcast(fileName);


MediaScannerConnection.scanFile(getApplicationContext(),
new String[] { fileName }, null, null);


注意 这里保存相册用到了创建文件:

File file = new File("/sdcard/myImage/");
file.mkdirs();// 

将文件 写入输出流:用刀try catch

try {
b = new FileOutputStream(fileName);
/*
 * BufferedOutputStream bos = new BufferedOutputStream( new
 * FileOutputStream(file));
 */
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件


} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();

} catch (IOException e) {
e.printStackTrace();
}
}

当初在这里纠结了老半天,b = new FileOutputStream(fileName);总是空,首先是作用域,以及FileOutputStream和BufferedOutputStream的使用。

用于显示:

((ImageView) findViewById(R.id.imageView)).setImageBitmap(bitmap);// 将图片显示在ImageView里


最后 是适用的权限:也害了我半天。

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:87862次
    • 积分:1535
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:112篇
    • 译文:0篇
    • 评论:9条
    最新评论