我通过
 Intent intent = new Intent(); //调用照相机
        intent.setAction("android.media.action.STILL_IMAGE_CAMERA");   
        startActivity(intent); 
调用手机照相机,那可不可以自己再重设置所拍照片的存储路径?

解决方案 »

  1.   

    你这代码只是打开相机,没有别的作用,你可以查framework中有保存路径的函数
      

  2.   


     /*拍照的照片存储位置*/  
        private static final File PHOTO_DIR = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera");  
      
       
     
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
      

  3.   

    自己调用Camera操作相机 在onPictureTaken处理数据保存
    # public class CameraTest_4 extends Activity implements    
    # Callback, OnClickListener, AutoFocusCallback{    
    #     SurfaceView mySurfaceView;//surfaceView声明    
    #     SurfaceHolder holder;//surfaceHolder声明    
    #     Camera myCamera;//相机声明    
    #     String filePath="/sdcard/wjh.jpg";//照片保存路径    
    #     boolean isClicked = false;//是否点击标识    
    #     //创建jpeg图片回调数据对象    
    #     PictureCallback jpeg = new PictureCallback() {    
    #             
    #         @Override    
    #         public void onPictureTaken(byte[] data, Camera camera) {    
    #             // TODO Auto-generated method stub    
    #             try    
    #             {// 获得图片    
    #             Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);    
    #             File file = new File(filePath);    
    #             BufferedOutputStream bos =    
    #                 new BufferedOutputStream(new FileOutputStream(file));    
    #             bm.compress(Bitmap.CompressFormat.JPEG, 100, bos);//将图片压缩到流中    
    #             bos.flush();//输出    
    #             bos.close();//关闭    
    #             }catch(Exception e)    
    #             {    
    #                 e.printStackTrace();    
    #             }    
    #                 
    #         }    
    #     };    
    #     /** Called when the activity is first created. */    
    #     @Override    
    #     public void onCreate(Bundle savedInstanceState) {    
    #         super.onCreate(savedInstanceState);    
    #         requestWindowFeature(Window.FEATURE_NO_TITLE);//无标题               
    #         //设置拍摄方向    
    #         this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);    
    #         setContentView(R.layout.main);    
    #         //获得控件    
    #         mySurfaceView = (SurfaceView)findViewById(R.id.surfaceView1);    
    #         //获得句柄    
    #         holder = mySurfaceView.getHolder();    
    #         //添加回调    
    #         holder.addCallback(this);    
    #         //设置类型    
    #         holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);    
    #         //设置监听    
    #         mySurfaceView.setOnClickListener(this);    
    #     }    
    #     @Override    
    #     public void surfaceChanged(SurfaceHolder holder, int format, int width,    
    #             int height) {    
    #         // TODO Auto-generated method stub    
    #         //设置参数并开始预览    
    #         Camera.Parameters params = myCamera.getParameters();    
    #         params.setPictureFormat(PixelFormat.JPEG);    
    #         params.setPreviewSize(640,480);    
    #         myCamera.setParameters(params);    
    #         myCamera.startPreview();    
    #             
    #     }    
    #     @Override    
    #     public void surfaceCreated(SurfaceHolder holder) {    
    #         // TODO Auto-generated method stub    
    #         //开启相机    
    #         if(myCamera == null)    
    #         {    
    #             myCamera = Camera.open();    
    #             try {    
    #                 myCamera.setPreviewDisplay(holder);    
    #             } catch (IOException e) {    
    #                 // TODO Auto-generated catch block    
    #                 e.printStackTrace();    
    #             }    
    #         }    
    #             
    #     }    
    #     @Override    
    #     public void surfaceDestroyed(SurfaceHolder holder) {    
    #         // TODO Auto-generated method stub    
    #         //关闭预览并释放资源    
    #         myCamera.stopPreview();    
    #         myCamera.release();    
    #         myCamera = null;    
    #             
    #     }    
    #     @Override    
    #     public void onClick(View v) {    
    #         // TODO Auto-generated method stub    
    #         if(!isClicked)    
    #         {    
    #             myCamera.autoFocus(this);//自动对焦    
    #             isClicked = true;    
    #         }else    
    #         {    
    #             myCamera.startPreview();//开启预览    
    #             isClicked = false;    
    #         }    
    #             
    #     }    
    #     @Override    
    #     public void onAutoFocus(boolean success, Camera camera) {    
    #         // TODO Auto-generated method stub    
    #         if(success)    
    #         {    
    #             //设置参数,并拍照    
    #             Camera.Parameters params = myCamera.getParameters();    
    #             params.setPictureFormat(PixelFormat.JPEG);    
    #             params.setPreviewSize(640,480);    
    #             myCamera.setParameters(params);    
    #             myCamera.takePicture(null, null, jpeg);    
    #         }    
    #             
    #     }    
    # }    
    http://wjhhanbao.iteye.com/blog/1008511
      

  4.   

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      File path = new File(mstrPath);
      if(!path.exists())
      path.mkdirs();
      mstrFileName = Global.GetTime2() + ".jpg";
      mstrFilePath = mstrPath + "/" + mstrFileName;
      Log.e(Global.TAG, mstrFilePath);
      File file = new File(mstrFilePath);
      Uri uri = Uri.fromFile(file);
      intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
      startActivityForResult(intent, 1);
      

  5.   

    我在做相机开发,想设置其焦距
    这是我从网上找到关于焦距设置的方案就是手机上有个应用!它是可以实现变焦的!但是,我的应用不行;Camera.getParameters().isZoomSupported() -->true
    Camera.getParameters().isSmoothZoomSupported() -->false这种情况下,我怎么才能实现变焦呢??我有两个手机:
    A.moto me1 ZoomSupported和SmoothZoom都是支持的,我测试了,可以实现变焦!
    B.HTC G8就是上面这种情况,ZoomSupported支持,SmoothZoom不支持,所以调用:Camera.startSmoothZoom(zoom)就没反应了,但是它手机上带了一个拍照程序,有变焦功能,说明SmoothZoom不支持的情况下应该也是可以实现变焦功能的!
    我尝试了,使用
    Camera.getParameters().setZoom(zoom);
    或者:
    Camera.Parameters localParameters = mCamera.getParameters();
    mCamera.getParameters().set("taking-picture-zoom", zoom);
    localParameters.set("taking-picture-zoom", zoom);
    都没反应!
    是不是改变了zoom后,还需要是操作???
    另外我将,HTC自带的拍照程序反编译了一下,它代码里,没有发现调用过:
    Camera.startSmoothZoom(zoom);
    但是有发现,调用过:
    Camera.Parameters localParameters = mCamera.getParameters();
    mCamera.getParameters().set("taking-picture-zoom", zoom);
    localParameters.set("taking-picture-zoom", zoom);
    还有就是发现它用了一个.so的动态链接库!还有,Camera360这款软件,也实现了变焦!不知道他们是怎么实现的!!???请高手指教
      

  6.   


    我有两个问题。首先在onActivityResult中的Intent返回的是null,从而无法获取照片名字。而如果在全局声明这个名字,那么有时候相机拍照保存之后还会自动打开相机,又重新生成了一个新的名字,导致刚刚获取的名字丢失。不知道怎么解决呢?如果只是打开相机,在onActivityResult中定义名字路径,用bitmap保存,但是又有一个问题,图片被压缩的严重。我想得到原图