Android调用系统相机照相,并显示在下拉列表上

本人是Android初学者,最近做小项目 遇到了一个问题,就是调用系统相机,然后把获取的图片显示到下拉列表上,起初总是被同一张照片覆盖。再网上看了许多前辈的代码后,今天终于弄成功了。前来分享一下,就是先让照片以固定命名之后,存在手机里,再让BitmapFactory.decodebyfile解析这个文件,得到位图之后,再保存到指定位置。  用一个List<String>保存这个文件的位置 再把List<String>适配到adapter里面 就可以了.直接上关键代码
//创建文件的位置
String url = Environment.getExternalStorageDirectory().toString()+"/image.jpg";
private List<String> mPlant;
//调用系统相机
private void takePhoto(){
                 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                imageFile = new File(url);
                // 获取文件的Uri
                Uri imageUri = Uri.fromFile(imageFile);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                startActivityForResult(intent, 1);

}
//这个方法为照片动态命名
private String getName() {
                SimpleDateFormat formet = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                Date date = new Date();
                String str = formet.format(date);
                return str;
        }


        //下面这个回调写的不严谨,仅供像我一样的新人参考
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                //将所拍的照片解析成一个位图
                Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().toString()+"/image.jpg");
              //为照片动态添加名字
                String fileName =getName()+".jpg";
                savePicture(fileName, bitmap);
                //再保存照片之后。再把照片的路径也保存下来.
                mPlants.add("data/data/com.example.phototo/files/"+fileName);
               //这句有问题,只是效果展示,不应该没次都创建对象, 应该用adapter.notifydatachaged()方法来更新数据
                ListAdapter adapter = new ListAdapter(this, mPlants);
               //设置adapter
                mListView.setAdapter(adapter);
                super.onActivityResult(requestCode, resultCode, data);
        }

              //存储照片到指定位置,下段代码为借鉴前辈的
private void savePicture(String fileName,Bitmap bitmap) {
                   
                        FileOutputStream fos =null;
                        try {//直接写入名称即可,没有会被自动创建;私有:只有本应用才能访问,重新内容写入会被覆盖
                                fos = MainActivity.this.openFileOutput(fileName, Context.MODE_PRIVATE); 
                                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);// 把图片写入指定文件夹中
                                
                        } catch (Exception e) {
                                e.printStackTrace();
                        } finally {
                                try {
                                        if(null != fos) {
                                                fos.close();
                                                fos = null;
                                        }
                                }catch(Exception e) {
                                        e.printStackTrace();
                                }
                        }
                }

写给像我一样的新人看
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值