2012-06-04 149 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的樣品,這對您很有幫助。

相關問題