zoukankan      html  css  js  c++  java
  • 关于android存储

      今天在测试android拍照功能时遇到一个困惑:照片拍成功了,程序能都能读取到,但是在手机储存中怎么也找不到拍的照片。先将学习过程中经过的曲折过程记录如下:

      一:拍照并保持

      通过调用android 的Camera接口,拍照片,在回调接口中保存图片:

      

    public void onPictureTaken(byte[] bytes, Camera camera) {
      // 定义文件名
      Date date = new Date();
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmssSS");
      String fileName = dateFormat.format(date)+".jpg";
      FileOutputStream os = null;
      boolean success = true;
      try{
    
        // 保存到内部储存
        os = getActivity().openFileOutput(path, Context.MODE_PRIVATE);
        os.write(bytes);
    
      }catch (IOException e){
      success = false;
      Log.e(TAG, "Error writing to file " + fileName, e);
    }

    原来此次调用的:getActivity().openFileOutput(path, Context.MODE_PRIVATE);是把文件储存到了APP的私有储存中的/data/data/...app包路径/file 中了,这个私有目录是不能被外部访问的,所以在手机储存中肯定看不到。

    二:该为储存到外部储存

      public void onPictureTaken(byte[] bytes, Camera camera) {
               // 定义文件名
                Date date = new Date();
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmssSS");
                String fileName = dateFormat.format(date)+".jpg";
                FileOutputStream os = null;
                boolean success = true;
                try{
                 
                    File path = Environment
                            .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
                    File file = new File(path, fileName);
    
           
                    path.mkdirs();
    
                    if (path.exists()){
                        os = new FileOutputStream(file);
                    }else {
                        Log.e(TAG,"Create path failed");
                        return;
                    }
                    // 保存到内部储存
                 
                    os.write(bytes);
    
                }catch (IOException e){
                    success = false;
                    Log.e(TAG, "Error writing to file " + fileName, e);
                }

    向外部储存读写文件需要申请权限,在app配置文件中增加如下权限:

      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    好了,文件保存成功了,但是还是在手机储存中看不到,为什么?

    原来,android储存中新增文件,并不能及时刷新储存目录,需要重启手机或者通过代码手动刷新目录。手动刷新目录经过我测试的有以下两种方式:

    1.发广播

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file.getAbsolutePath().toString())));

    其中第二个参数指的是保存文件的绝对路径

    2.MediaScannerConnection

    MediaScannerConnection.scanFile(getActivity(), new String[]{file.getAbsolutePath().toString()}, null, null);

    三:总结

    Android的储存分为app私有储存和外部储存。app私有储存是不可以被其他app访问的。外部储存是可以被其他app共享的。外部储存并不是指SD卡储存,也包括手机自身的储存空间。

  • 相关阅读:
    KMP
    837B. Balanced Substring
    JDK7和JDK8新特性
    数据库索引的实现原理
    mysql索引总结----mysql 索引类型以及创建
    Java 8新特性终极指南
    类加载机制
    类加载过程
    深入理解java虚拟机 精华总结(面试)(转)
    几种常用的设计模式介绍(转)
  • 原文地址:https://www.cnblogs.com/spplus/p/4524583.html
Copyright © 2011-2022 走看看