安卓相机API应用程序关闭按钮点击果冻豆

问题描述:

以下代码在冰淇淋三明治上完美运行,但它强制关闭果冻豆和奇巧。 请帮我一把。安卓相机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的成功运行),但强制关闭,因为我点击了制作照片按钮,以防果冻豆和奇巧。请指导我哪里是错误的..什么是所做的所有更改.. ??

你应该发布你在日志中看到的实际错误(异常/堆栈跟踪)。

但是,它看起来像你永远不会启动相机预览。虽然它可能适用于某些制造商的设备,但您需要先启动相机预览才能拍摄照片。这意味着您需要预览的目标(SurfaceView或SurfaceTexture),并且您的Surface必须在Surface有效后才能开始预览。

请看一看样品相机应用在Android开发者网站了解详情: Building a camera app