Android拍照或图库选择照片上传(附服务器端代码)
2015-11-28 15:01
573 查看
这个是大部分的app都有的功能,之前是用的同事的工具类,没自己写过,今天正好有空,就写在博客中方便以后查看
需要用到的系统权限,1是摄像头权限 2读写sd卡的权限3.网络权限
打开摄像头
Override一下onActivityResult
思路就是通过Bundle返回的bitmap,把bitmap写入到sd卡里面,返回一个sd卡的路径
调用系统图库
//使用Xutils上传图
服务器使用的是ASP.Net MVC webapi
Demo下载
需要用到的系统权限,1是摄像头权限 2读写sd卡的权限3.网络权限
<uses-permission android:name="android.permission.CAMERA"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
打开摄像头
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(camera, XIANGJI);
Override一下onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); }
思路就是通过Bundle返回的bitmap,把bitmap写入到sd卡里面,返回一个sd卡的路径
/** * 根据Bundle获取图片在sd卡的路径 * @param bundle * @return */ private String getCameraImage(Bundle bundle) { String strState = Environment.getExternalStorageState(); if (!strState.equals(Environment.MEDIA_MOUNTED)) { Log.i("TAG", "SD卡不存在"); } String fileName = "chenxin.jpg"; //此处可以改为时间 // Bundle bundle = data.getExtras(); Bitmap bitmap = (Bitmap) bundle.get("data"); File file = new File("/sdcard/tu/"); if (!file.exists()) { file.mkdirs(); } fileName = "/sdcard/tu/" + fileName; FileOutputStream stream = null; try { stream = new FileOutputStream(fileName); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { if (stream != null) { stream.flush(); stream.close(); } } catch (IOException e) { e.printStackTrace(); } } return fileName; }
调用系统图库
Intent picture = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(picture, TUKU); **把Bundle的getdata返回的URI转换成file的那种URi**```
/** * 获取系统图库图片的SD卡路径 * * @param data * @return */ private String getPhoneImage(String uriString) { Uri selectedImage = Uri.parse(uriString); String[] filePathColumns = {MediaStore.Images.Media.DATA}; Cursor cursor = this.getContentResolver().query(selectedImage, filePathColumns, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumns[0]); String fileName = cursor.getString(columnIndex); cursor.close(); return fileName; }
**然后使用Xutils的post上传图片到服务器**
//使用Xutils上传图
HttpUtils httpUtils = new HttpUtils(); RequestParams params = new RequestParams(); params.addBodyParameter("File",new File(filePath)); httpUtils.send(HttpRequest.HttpMethod.POST,"http://192.168.0.109:5421/api/upload/Uploadimg", params, new RequestCallBack<String>() { @Override public void onSuccess(ResponseInfo<String> responseInfo) { Log.e("返回值",responseInfo.result); } @Override public void onFailure(HttpException e, String s) { Log.e("失败:",e.getMessage()); } });
服务器使用的是ASP.Net MVC webapi
public class UploadController : ApiController { public string Uploadimg() { HttpPostedFile file = HttpContext.Current.Request.Files[0]; string strPath = @"D:\WWW\test2.png"; //此处路径可以自由配置 file.SaveAs(strPath); string result = "成功"; return result; } }
Demo下载
相关文章推荐
- 从Android客户端内部跳转到安卓市场对客户端进行评价
- 005AutoCompleteView自动完成文本框 与Adapter 初步了解
- 基于Android系统的UPNP媒体播放器的实现步骤
- android异步AsyncTask
- Android最新敲诈者病毒分析及解锁
- android源码开发之Camera添加自动对焦ListPreference,camera,key
- android圆形缓冲进度条
- Android Launcher开发(一)LiveFolder(实时文件夹) 完全解析
- 判断Android设备是否拥有Root权限
- Android开发 本地与在线音乐播放器(基于Service实现)
- android 5.X之使用Palette
- android之GridView实现九宫格布局
- 在Android中,使用Kotlin的 API请求简易方法
- cmd命令生成android签名证书
- Android 应用隐藏标题栏和状态栏
- Android中的颜色表示
- Android AutoLayout全新的适配方式 堪称适配终结者
- Android应用内存泄漏分类
- android桌面文件夹美化
- android camera接口介绍