zoukankan      html  css  js  c++  java
  • androidAndroid拍照、录像、录音代码范例以备后用

    package com.cons.dcg.collect;

     

    import java.io.File;

    import java.text.SimpleDateFormat;

    import java.util.*;

    import android.app.*;

    import android.content.Intent;

    import android.database.Cursor;

    import android.net.Uri;

    import android.os.AsyncTask;

    import android.os.Bundle;

    import android.os.Environment;

    import android.provider.MediaStore;

    import android.view.*;

    import android.widget.*;

     

    public class RecordActivity extends Activity implements OnClickListener {

     

            private static final int RESULT_CAPTURE_IMAGE = 1;// 照相的requestCode

            private static final int REQUEST_CODE_TAKE_VIDEO = 2;// 摄像的照相的requestCode

            private static final int RESULT_CAPTURE_RECORDER_SOUND = 3;// 录音的requestCode

           

            private String strImgPath = "";// 照片文件绝对路径

            private String strVideoPath = "";// 视频文件的绝对路径

            private String strRecorderPath = "";// 录音文件的绝对路径

     

            @Override

            protected void onCreate(Bundle savedInstanceState) {

                    super.onCreate(savedInstanceState);

                    this.setContentView(R.layout.problem_report);

            }

     

            @Override

            protected void onActivityResult(int requestCode, int resultCode, Intent data) {

                    super.onActivityResult(requestCode, resultCode, data);

                    switch (requestCode) {

                    case RESULT_CAPTURE_IMAGE://拍照

                            if (resultCode == RESULT_OK) {

                                    Toast.makeText(this, strImgPath, Toast.LENGTH_SHORT).show();

                            }

                            break;

                    case REQUEST_CODE_TAKE_VIDEO://拍摄视频

                            if (resultCode == RESULT_OK) {

                                    Uri uriVideo = data.getData();

                                    Cursor cursor=this.getContentResolver().query(uriVideo, null, null, null, null);

                                    if (cursor.moveToNext()) {

                                            /** _data:文件的绝对路径 ,_display_name:文件名 */

                                            strVideoPath = cursor.getString(cursor.getColumnIndex("_data"));

                                            Toast.makeText(this, strVideoPath, Toast.LENGTH_SHORT).show();

                                    }

                            }

                            break;

                    case RESULT_CAPTURE_RECORDER_SOUND://录音

                            if (resultCode == RESULT_OK) {

                                    Uri uriRecorder = data.getData();

                                    Cursor cursor=this.getContentResolver().query(uriRecorder, null, null, null, null);

                                    if (cursor.moveToNext()) {

                                            /** _data:文件的绝对路径 ,_display_name:文件名 */

                                            strRecorderPath = cursor.getString(cursor.getColumnIndex("_data"));

                                            Toast.makeText(this, strRecorderPath, Toast.LENGTH_SHORT).show();

                                    }

                            } 

                            break;

                    }

            }

           

           

     

           /**

            * 照相功能

             */

            private void cameraMethod() {

                    Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                    strImgPath = Environment.getExternalStorageDirectory().toString() + "/CONSDCGMPIC/";//存放照片的文件夹

                    String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg";//照片命名

                    File out = new File(strImgPath);

                    if (!out.exists()) {

                            out.mkdirs();

                    }

                    out = new File(strImgPath, fileName);

                    strImgPath = strImgPath + fileName;//该照片的绝对路径

                    Uri uri = Uri.fromFile(out);

                    imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

                    imageCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

                    startActivityForResult(imageCaptureIntent, RESULT_CAPTURE_IMAGE);

     

            }

     

           /**

             * 拍摄视频

             */

            private void videoMethod() {

                    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

                    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);

                    startActivityForResult(intent, REQUEST_CODE_TAKE_VIDEO);

            }

     

            /**

             * 录音功能

             */

            private void soundRecorderMethod() {

                    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

                    intent.setType("audio/amr");

                    startActivityForResult(intent, RESULT_CAPTURE_RECORDER_SOUND);

            }

     

            /**

             * 提示信息

             * @param text

             * @param duration

             */

            private void showToast(String text, int duration) {

                    Toast.makeText(ProblemReport.this, text, duration).show();

            }

    }

    源自:http://www.oschina.net/code/snippet_163910_6069

     

     

    package com.tangzq;

      

    import java.io.BufferedInputStream;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.util.ArrayList;

    import java.util.Calendar;

    import java.util.List;

     

    import com.tangzq.Controllers.DialogController;

    import  com.tangzq.Util.FilesUtil;

    import android.app.Activity;

    import android.app.AlertDialog;

    import android.content.DialogInterface;

    import android.content.Intent;

    import android.content.SharedPreferences;

    import android.content.SharedPreferences.Editor;

    import android.database.Cursor;

    import android.graphics.Bitmap;

    import android.graphics.Bitmap.CompressFormat;

    import android.graphics.BitmapFactory;

    import android.graphics.Matrix;

    import android.graphics.PixelFormat;

    import android.net.Uri;

    import android.os.Build;

    import android.os.Bundle;

    import android.os.Environment;

    import android.provider.MediaStore;

    import android.util.Log;

    import android.view.Window;

    import android.view.WindowManager;

    import android.widget.ImageView;

     

    /**

     * @author tangzq

     *

     */

    public class PhotoAndVideoActivity extends Activity {

        private static final String TAG="PhotoAndVideoActivity";

     ImageView tanmatsuCamera;

     

    private static final int REQUEST_CODE_CAMERA_SHOOT = 1;

    private static final int REQUEST_CODE_VIDEO_SHOOT=2;

    private SharedPreferences sp;

    String manu = Build.MANUFACTURER;

    Uri pictureUri;

    Uri videoUri;

    List<String> imageList = new ArrayList<String>();

    List<String> videoList=new ArrayList<String>();

    String newPath;

    String filename;

    private List<String> temp;

    Bitmap bmp;

    String fileUri = Environment.getExternalStorageDirectory()

    .getAbsolutePath() + "/Temp/";

        public static final String TAKEN_PICTURE_PREFIX="taken_pic_";

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    getWindow().setFormat(PixelFormat.TRANSLUCENT);

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

    WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.tanmatsu_camera);

    tanmatsuCamera = (ImageView) findViewById(R.id.tanmatsuCamera);

     

    temp = getIntent().getStringArrayListExtra("imagefiles");

    if (temp != null)

    imageList = temp;

            boolean isTakenPicture=getIntent().getBooleanExtra("isTakenPicture", false);

            boolean isShootVideo=getIntent().getBooleanExtra("isShootVideo", false);

            if(isTakenPicture){

            startCamera();

            }

            if(isShootVideo){

            startVideo();

            }

    }

     

    public void startCamera() {

    filename = "template" + (imageList.size() + 1) + ".jpg";

    pictureUri = Uri.fromFile(new File(fileUri, filename));

    if (sp == null)

    sp = getPreferences(MODE_PRIVATE);

    Editor editor = sp.edit();

    editor.putString("pictureUri", pictureUri.toString());

    editor.commit();

    //启动照相功能

    Intent intent = new Intent();

    intent.setAction("android.media.action.IMAGE_CAPTURE");

    intent.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri);

    startActivityForResult(intent, REQUEST_CODE_CAMERA_SHOOT);

    }

       public void startVideo(){

      filename="video_template"+System.currentTimeMillis()+".mp4";

      videoUri=Uri.fromFile(new File(fileUri,filename));

      if(sp==null)

      sp=getPreferences(MODE_PRIVATE);

      Editor editor=sp.edit();

      editor.putString("videoUri", videoUri.toString());

       //启动录视频功能

      Intent mIntent = new Intent();

      mIntent.setAction("android.media.action.VIDEO_CAPTURE");

      startActivityForResult(mIntent, REQUEST_CODE_VIDEO_SHOOT);

       }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

     

    Log.e("SHELF ON ACTIVITY RESULT CODE", "RESULT CODE: " + resultCode);

    if (requestCode == REQUEST_CODE_CAMERA_SHOOT) {//获得图片

    if (resultCode == Activity.RESULT_OK) {

    Intent intentResult = new Intent();

    Uri resultUri = null;

    if (sp == null) {

    sp = getPreferences(MODE_PRIVATE);

    }

    if (intentResult != null && intentResult.getData() != null) {

    resultUri = intentResult.getData();

    } else {

    resultUri = pictureUri;

    }

    String oldPath = resultUri.getPath();

    try {

    filename = (imageList.size() + 1) + ".jpg";

    newPath = fileUri + filename;

    FileOutputStream filedest = new FileOutputStream(newPath);

    BitmapFactory.Options bmpOpt = new BitmapFactory.Options();

    bmpOpt.inJustDecodeBounds = true;

    bmp = BitmapFactory.decodeFile(oldPath, bmpOpt);

    int megaPixel = bmpOpt.outWidth * bmpOpt.outHeight;

    int sampleSize = 1;

    if (bmpOpt.outWidth > 0 && bmpOpt.outHeight > 0) {

    while ((megaPixel / (sampleSize * sampleSize)) > 500000) {

    sampleSize++;

    }

    bmpOpt.inJustDecodeBounds = false;

    bmpOpt.inSampleSize = sampleSize;

     

    Bitmap bmpTemp = BitmapFactory.decodeFile(oldPath,

    bmpOpt);

    int w = bmpTemp.getWidth();

    int h = bmpTemp.getHeight();

     

    if (w > h) {

    Matrix mtx = new Matrix();

    if (w > h) {

    mtx.setRotate(90);

    }

    Bitmap rotatedBMP = Bitmap.createBitmap(bmpTemp, 0,

    0, w, h, mtx, true);

    tanmatsuCamera.setImageBitmap(rotatedBMP);

    rotatedBMP.compress(CompressFormat.JPEG, 100,

    filedest);

    } else {

    tanmatsuCamera.setImageBitmap(bmpTemp);

    bmpTemp.compress(CompressFormat.JPEG, 100, filedest);

    }

    FileInputStream is=new FileInputStream(new File(oldPath));

    saveTakenPictureToJacket(is,Main.main.photosDirectoryPathFromLocal);

     

    System.gc();

    }

    filedest.close();

     

    } catch (FileNotFoundException e) {

    // TODO Auto-generated catch block

    Log.e("CAMERA ROLL", "Error: " + e.getMessage());

    } catch (IOException e) {

    // TODO Auto-generated catch block

    Log.e("CAMERA ROLL", "Error: " + e.getMessage());

    }

    imageList.add(newPath);

    repeatDialogOpen();

    }

    else {

    if (imageList.size() != 0) {

    finishDialogOpen();

    } else {

    finish();

    }

    }

    }

    if(requestCode==REQUEST_CODE_VIDEO_SHOOT){//获得录的视频

    if (resultCode == Activity.RESULT_OK){

    Log.e(TAG, data.getData().toString());

    //Toast.makeText(this, data.getData().toString(), 1).show();

    Cursor cursor=this.getContentResolver().query(data.getData(), null, null, null, null);

                    if (cursor.moveToNext()) {

                            /** _data:文件的绝对路径 ,_display_name:文件名 */

                            String strVideoPath = cursor.getString(cursor.getColumnIndex("_data"));

                            String videoFilename=cursor.getString(cursor.getColumnIndex("_display_name"));

                            Log.e(TAG, "videoPath:"+strVideoPath);

                           // Toast.makeText(this, strVideoPath, Toast.LENGTH_SHORT).show();

            String oldPath =strVideoPath;

            String newPath=Main.main.moviesDirectoryPathFromLocal+videoFilename;

            //move the video to Movies folder in sdcard

            try {

            FilesUtil.saveFileToFolder(new FileInputStream(oldPath), Main.main.moviesDirectoryPathFromLocal, videoFilename);

            Log.e(TAG, "oldPath:"+oldPath+","+videoList);

            //delete the template mp4 file 

            FilesUtil.deleteFilesInFolder(oldPath);

            videoList.add(newPath);

            //repeatShootVideoDialogOpen();

            Main.main.integrateMovie(Main.main.moviesDirectoryPathFromLocal);

    Main.main.getTabHost().setCurrentTab(0);

    Shelves.setupShelf();

    Shelves.shelfadap.notifyDataSetChanged();

    finish();

            } catch (FileNotFoundException e) {

            e.printStackTrace();

            } catch (IOException e) {

            e.printStackTrace();

            }

                    }

    }

    }

    }

     

    public void saveTakenPictureToJacket(FileInputStream is,String bookJacketDirectoryPath){

    BitmapFactory.Options options = new BitmapFactory.Options();

    //options.inSampleSize = 8;

    options.inSampleSize = 4;

    Bitmap bMap = BitmapFactory.decodeStream(new BufferedInputStream(is), null, options);

     

    Calendar rightNow = Calendar.getInstance();

    String bookJacketName = TAKEN_PICTURE_PREFIX + rightNow.get(Calendar.YEAR) + ""

    + rightNow.get(Calendar.MONTH) + ""

    + rightNow.get(Calendar.DAY_OF_MONTH) + ""

    + rightNow.get(Calendar.HOUR_OF_DAY) + ""

    + rightNow.get(Calendar.MINUTE) + ""

    + rightNow.get(Calendar.SECOND) + ""

    + rightNow.get(Calendar.MILLISECOND);

    File bookJacketFile = new File(bookJacketDirectoryPath

    + bookJacketName + ".jpg");

     

    if (bookJacketFile.exists()) {

    bookJacketFile.delete();

    }

     

    FileOutputStream fos;

    try {

    fos = new FileOutputStream(bookJacketFile);

    bMap.compress(Bitmap.CompressFormat.JPEG, 100, fos);

    } catch (FileNotFoundException e) {

    e.printStackTrace();

    }

    }

    public void repeatDialogOpen() {

    final AlertDialog dialogDep = new AlertDialog.Builder(this)

    .setTitle(getResources().getString(R.string.camera_confirm))

    .setMessage(

    getResources().getString(

    R.string.camera_continue_question))

    .setPositiveButton(

    getResources().getString(R.string.camera_continue),

    new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface di,

    int whichButton) {

    startCamera();

    }

    })

    .setNegativeButton(

    getResources().getString(R.string.camera_end),

    new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface di,

    int whichButton) {

    finishDialogOpen();

    }

    }).create();

    dialogDep.show();

    }

     

    public void finishDialogOpen() {

    if (Main.main.create == true) {

    DialogController dialog = new DialogController(TanmatsuCamera.this,

    imageList);

    dialog.displayDialog(R.layout.exportoptions, getResources()

    .getString(R.string.Export_Option));

    } else {

    Intent intent = new Intent(Shelves.shelves, ImageList.class);

    intent.putExtra("name", "");

    intent.putStringArrayListExtra("imagefiles",

    (ArrayList<String>) imageList);

    Shelves.shelves.startActivityForResult(intent,

    Main.main.CREATE_EBOOK);

    finish();

    }

    }

    }

  • 相关阅读:
    洛谷 P1383 高级打字机==codevs 3333 高级打字机
    洛谷 P1525 关押罪犯==codevs 1069 关押罪犯[NOIP 2010]
    洛谷P2668 斗地主==codevs 4610 斗地主[NOIP 2015 day1 T3]
    poj1426
    3049 舞蹈家怀特先生
    1444 “破锣摇滚”乐队
    cocos2d-x开发的《派对小游戏》-github源代码分享
    【c语言】字符串替换空格:请实现一个函数,把字符串中的每一个空格替换成“%20”
    CAP理论与HBase
    也谈以人为本—— 服务型企业的管理随想
  • 原文地址:https://www.cnblogs.com/fx2008/p/3133225.html
Copyright © 2011-2022 走看看