Android编程权威指南(第二版)第十六章-使用intent拍照

POINT 1:(MARK先,经常用可能才记得住)

Context类提供的基本文件和目录处理方法:(存储的文件仅供应用内部使用)

  File getFilesDir()                    

          获取/data/data/<packagename>/files目录
  FileInputStream openFileInput(String name)     

          打开现有文件进行读取
  FileOutputStream openFileOutput(String name, int mode)

          打开文件进行写入,如不存在就创建它               
  File getDir(String name, int mode)          

          获取/data/data/<packagename>/目录的子目录(如不存在就先创建它)

  String[] fileList()                  

          获取/data/data/<packagename>/files目录下的文件列表。

          可与其他方法配合使用,例如openFileInput(String)

  File getCacheDir()                  

           获取/data/data/<packagename>/cache目录。应注意及时清理该目录,并节约使用空间

Context类提供的外部文件和目录处理方法:(公共文件,谨慎使用)

  File getExternalCacheDir() 

          获取主外部存储上的缓存文件目录。用法类似getCacheDir()方法,但要注意, Android一般不会自动清理该目录

  File[] getExternalCacheDirs()

          获取多个外部存储上的缓存文件目录
  File getExternalFilesDir(String)  

           获取主外部存储上存放常规文件的文件目录。通过String参数,可访问特定内容类型的子目录。

          内容类型常量以DIRECTORY_为前缀,定义在Environment 中.

          例如,用于图像文件的Environment.DIRECTORY_PICTURES
  File[] getExternalFilesDirs(String)  

          类似getExternalFilesDir(String)方法,但该方法可获取指定类型的所有文件目录
  File[] getExternalMediaDirs()  

          获取Android存储图片,视 频和音乐文件的所有外部文件目录.

  getExternalMediaDirs和getExternalFilesDir(Environment.DIRECTORY_PICTURES)方法别在于调用该方法,多媒体扫描器会自动扫描目标目录,并将存放的多媒体文件暴露给能够播放音乐、浏览视频和图片的应用。也就是说,getExternalMediaDirs()方法返回目录中存放的任何文件都会自动出现在多媒体应用中

 

存储部分核心实例代码:

申请外部存储读写权限(AndroidManifest.xml)

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

  maxSdkVersion属性规定:只有在API级别小于19的Android设备上,应用才需要这样的权限申请。WRITE_EXTERNAL_STORAGE写权限,调用的相机应用可以搞定这个权限。

从外部存储得到文件

  File externalFilesDir = mContext.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
  if (externalFilesDir == null) {return null;}//效验外部存储是否可以使用
  File file =new File(externalFilesDir, "file_name");//文件名要有属性后缀

调用相机应用:

MediaStore类定义了一些公共接口,可用于处理图像、视频以及音乐这些常见的多媒体任务。当然,这也包括触发相机应用的拍照intent。
ACTION_IMAGE_CAPTURE打开相机应用,默认只能拍摄缩略图这样的低分辨率照片,而且照片会保存在onActivityResult(...)返回的Intent对象里。

  final Intent captureImage = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

  boolean canTakePhoto = mPhotoFile != null &&captureImage.resolveActivity(packageManager) != null;

              //是否有地方存储照片,以及检查设备上是否安装有相机应用

  mButton.setEnabled(canTakePhoto);
  if (canTakePhoto) {
    Uri uri = Uri.fromFile("file_name");
    captureImage.putExtra(MediaStore.EXTRA_OUTPUT, uri);

    //如果想要获得全尺寸照片,使用文件系统存储照片,存储在存储路径uri路径下
  }
  mButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      startActivityForResult(captureImage, REQUEST_PHOTO);
    }
  });

 

<uses-feature android:name="android.hardware.camera" android:required="false"/>

uses-feature声明需要使用相机,设置了 android:required="false" 属性,Android系统就知道,尽管不带相机的设备会导致拍照功能缺失,但应用仍然可以正常安装和使用。

posted @ 2017-03-15 19:59  HeLing_CC  阅读(151)  评论(0)    收藏  举报