2014-01-27 78 views
0

以下代碼在冰淇淋三明治上完美運行,但它強制關閉果凍豆和奇巧。 請幫我一把。安卓相機API應用程序關閉按鈕點擊果凍豆

MainActivity.java

package com.example.final_cam; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.app.Activity; 
import android.content.pm.PackageManager; 
import android.hardware.Camera; 
import android.hardware.Camera.CameraInfo; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
final static String DEBUG_TAG = "MainActivity"; 
    private Camera camera; 
    private int cameraId = 0; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // do we have a camera? 
    if (!getPackageManager() 
     .hasSystemFeature(PackageManager.FEATURE_CAMERA)) { 
     Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG) 
      .show(); 
    } else { 
     cameraId = findFrontFacingCamera(); 
     if (cameraId < 0) { 
     Toast.makeText(this, "No front facing camera found.", 
      Toast.LENGTH_LONG).show(); 
     } else { 
     camera = Camera.open(cameraId); 
     } 
    } 
} 

public void onClick(View view) { 
     camera.takePicture(null, null, 
      new PhotoHandler(getApplicationContext())); 
     } 
    private int findFrontFacingCamera() { 
     int cameraId = -1; 
     // Search for the front facing camera 
     int numberOfCameras = Camera.getNumberOfCameras(); 
     for (int i = 0; i < numberOfCameras; i++) { 
      CameraInfo info = new CameraInfo(); 
      Camera.getCameraInfo(i, info); 
      if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { 
      Log.d(DEBUG_TAG, "Camera found"); 
      cameraId = i; 
      break; 
      } 
     } 
     return cameraId; 
     } 
    @Override 
    protected void onPause() { 
    if (camera != null) { 
     camera.release(); 
     camera = null; 
    } 
    super.onPause(); 
    } 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 

PhotoHandler.java

package com.example.final_cam; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import android.annotation.SuppressLint; 
import android.content.Context; 
import android.hardware.Camera; 
import android.hardware.Camera.PictureCallback; 
import android.os.Environment; 
import android.util.Log; 
import android.widget.Toast; 

public class PhotoHandler implements PictureCallback { 
private final Context context; 
public PhotoHandler(Context context) { 
     this.context = context; 
     } 
@SuppressLint("SimpleDateFormat") 
@Override 
public void onPictureTaken(byte[] data, Camera camera) { 
    // TODO Auto-generated method stub 
    File pictureFileDir = getDir(); 

    if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) { 

     Log.d(MainActivity.DEBUG_TAG, "Can't create directory to save image."); 
     Toast.makeText(context, "Can't create directory to save image.", 
      Toast.LENGTH_LONG).show(); 
     return;  
} 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss"); 
    String date = dateFormat.format(new Date()); 
    String photoFile = "Picture_" + date + ".jpg"; 

    String filename = pictureFileDir.getPath() + File.separator + photoFile; 

    File pictureFile = new File(filename); 

try { 
     FileOutputStream fos = new FileOutputStream(pictureFile); 
     fos.write(data); 
     fos.close(); 
     Toast.makeText(context, "New Image saved:" + photoFile, 
      Toast.LENGTH_LONG).show(); 
    } catch (Exception error) { 
     Log.d(MainActivity.DEBUG_TAG, "File" + filename + "not saved: " 
      + error.getMessage()); 
     Toast.makeText(context, "Image could not be saved.", 
      Toast.LENGTH_LONG).show(); 
    } 

} 

private File getDir() { 
     File sdDir = Environment 
      .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
     return new File(sdDir, "CameraAPIDemo"); 
     } 
    } 

我曾經在這裏給出的鏈接代碼... http://www.vogella.com/tutorials/AndroidCamera/article.html 它在我的Galaxy Tab(Ice Cream Sandwich的成功運行),但強制關閉,因爲我點擊了製作照片按鈕,以防果凍豆和奇巧。請指導我哪裏是錯誤的..什麼是所做的所有更改.. ??

回答

1

你應該發佈你在日誌中看到的實際錯誤(異常/堆棧跟蹤)。

但是,它看起來像你永遠不會啓動相機預覽。雖然它可能適用於某些製造商的設備,但您需要先啓動相機預覽才能拍攝照片。這意味着您需要預覽的目標(SurfaceView或SurfaceTexture),並且您的Surface必須在Surface有效後才能開始預覽。

請看一看樣品相機應用在Android開發者網站了解詳情: Building a camera app