android 多媒体和相机详解九
释放相机
想机是被设备上的应用们共享的资源.你的应用可以在获取相机实例后使用它,并且你的应用必须在用完后释放它,而且在暂停时(Activity.onPause())也要釋放它.如果你的应用没有适当的释放相机,所有后续试图获取相机使用权的操作,包括你自己的应用,都会失败并且导致那些应用关闭.
要释放一个相机对象实例,使用方法Camera.release(),如下代码所示:
[java]
public class CameraActivity extends Activity {
private Camera mCamera;
private Su易做图ceView mPreview;
private MediaRecorder mMediaRecorder;
...
@Override
protected void onPause() {
super.onPause();
releaseMediaRecorder(); // if you are using MediaRecorder, release it first
releaseCamera(); // release the camera immediately on pause event
}
private void releaseMediaRecorder(){
if (mMediaRecorder != null) {
mMediaRecorder.reset(); // clear recorder configuration
mMediaRecorder.release(); // release the recorder object
mMediaRecorder = null;
mCamera.lock(); // lock camera for later use
}
}
private void releaseCamera(){
if (mCamera != null){
mCamera.release(); // release the camera for other applications
mCamera = null;
}
}
}
public class CameraActivity extends Activity {
private Camera mCamera;
private Su易做图ceView mPreview;
private MediaRecorder mMediaRecorder;
...
@Override
protected void onPause() {
super.onPause();
releaseMediaRecorder(); // if you are using MediaRecorder, release it first
releaseCamera(); // release the camera immediately on pause event
}
private void releaseMediaRecorder(){
if (mMediaRecorder != null) {
mMediaRecorder.reset(); // clear recorder configuration
mMediaRecorder.release(); // release the recorder object
mMediaRecorder = null;
mCamera.lock(); // lock camera for later use
}
}
private void releaseCamera(){
if (mCamera != null){
mCamera.release(); // release the camera for other applications
mCamera = null;
}
}
}
保存媒体文件
用户创建的媒体文件,比如图片或视频,应该被保存到设备的外部存储中(SD Card) ,这样可以保留系统空间并且使得用户可以不通过设备也能获取这些文件.一个设备上有很多可以存放媒体文件的路径位置,然而只有两个标准的路径对于开发者来说是必须考虑的:
· Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) - 此方法返回标准的,共享的,并且是推荐的存储位置.此路径是被共享的(公开的),所以其它应用可以轻松发现然后读取,修改以及删除此路径下的文件们.如果你的应用被用户卸载,保存在此路径下的文件将被删除.要避免与干涉已存在的图片或视频文件,你应该在路径下为你的应用创建一个子文件夹,如后面例子中所示.此方法从Android 2.2 (API Level 8)中开始可以使用,对于等价的早期API的调用,见"保存共享文件"一节.
· Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) - 此方法返回一个标准的存储图像和视频位置,并且此位置与你的应用会关联起来.如果你的应用被删除,所有此位置下的文件们都将被删除.此位置下的文件不会强制应用安全特性,所以其它应用可以读取,修改以及删除它们.
下面的代码示例演示了如何为一个媒体文件创建一个文件或Uri位置.这个文件可以在通过intent调用一个设备的相机或在创建一个相机应用时使用:
[java]
public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;
/** 创建一个文件Uri来存储一个图像或视频 */
private static Uri getOutputMediaFileUri(int type){
return Uri.fromFile(getOutputMediaFile(type));
}
/** 创建一个文件用于存储图像或视频 */
private static File getOutputMediaFile(int type){
// 为了安全,你应该检查SDCard是否被mounted,
// 所以应先调用Environment.getExternalStorageState().
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyCameraApp");
//如果你想创建图像并在应用之间共享,还想让你的图像在你的应用卸载后依然存在,
// 这个位置是最好的选择.
// 如果存储位置不存在,创建它.
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// 创建媒体文件的名字
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
&n
补充:移动开发 , Android ,