2012-06-04 103 views
1

我正在尝试拍摄照片,当用户单击按钮时,我想将照片保存到内部存储器。我将在没有SD卡的平板电脑上进行测试。我也是在android上拍摄照片的新手,并且网络无法找到需要将特定代码写入除sd卡以外的其他代码的帮助。这是我的camera.java的样子。拍摄照片并将其存储到内部存储器

package com.test; 

import com.test.R; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import android.app.Activity; 

import android.hardware.Camera; 
import android.hardware.Camera.PictureCallback; 
import android.hardware.Camera.ShutterCallback; 

import android.os.Bundle; 

import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.FrameLayout; 

public class camera extends Activity 
{ 
    private static final String TAG = "CameraDemo"; 
     Camera camera; 
     Preview preview; 
     Button buttonClick; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.camera); 

     preview = new Preview(this); 
     ((FrameLayout) findViewById(R.id.preview)).addView(preview); 

     buttonClick = (Button) findViewById(R.id.buttonClick); 
     buttonClick.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback); 
      } 
     }); 

     Log.d(TAG, "onCreate'd"); 
    } 


    ShutterCallback shutterCallback = new ShutterCallback() { 
     public void onShutter() { 
      Log.d(TAG, "onShutter'd"); 
     } 
    }; 

    /** Handles data for raw picture */ 
    PictureCallback rawCallback = new PictureCallback() { 
     public void onPictureTaken(byte[] data, Camera camera) { 
      Log.d(TAG, "onPictureTaken - raw"); 
     } 
    }; 

    /** Handles data for jpeg picture */ 
    PictureCallback jpegCallback = new PictureCallback() { 
     public void onPictureTaken(byte[] data, Camera camera) { 
      FileOutputStream outStream = null; 
      try { 
       // write to local sandbox file system 
       outStream = camera.this.openFileOutput(String.format("%d.jpg", System.currentTimeMillis()), 0); 
       // Or write to sdcard 
       //outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));  
       outStream.write(data); 
       outStream.close(); 
       Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
      } 
      Log.d(TAG, "onPictureTaken - jpeg"); 
     } 
    }; 

} 
+1

仅供参考,大多数不支持可移动外部存储的设备仍然有一个“外部存储”分配在可通过api调用找到的焊接闪存中。尽管可能有例外,并且确实存在依赖于可能不存在的可移动卡的设备的情况,以及存储分区对于应用程序不可用的情况,因为它正被连接到可远程访问PC。 –

回答

2

这是不是真的很清楚你用这个代码得到什么样的问题。你打开文件的方式似乎很好,所以也许它的行为方式不正确?

本页面Android的文档中有关于使用不同种类的可用存储到你的应用程序的详细信息:http://developer.android.com/guide/topics/data/data-storage.html

尤其是部分约saving files that should be shared可能是您的情况非常有用。它引用了“外部存储”,但许多设备使用内部存储来模拟外部存储,因此作为开发人员您无需担心。

如果您希望图片在系统的Gallery应用程序中可见,您可以使用MediaScannerConnection.scanFile将其添加到介质扫描。但是,如果您将文件存储在应用程序的专用存储中(openFileOutput),这可能不起作用。

0

您可以从CommonsAware的Github页面看到这个Picture Demo的样品,这对您很有帮助。

相关问题