A. 安卓手機找不到Camera文件夾
以魅族note6手機為例,查看方式如下:
一、打開手機,在手機桌面上找到「文件管理」一項的圖標,然後點擊進入。
B. android camera預覽關閉後還可以再次打開嗎
activity pause過後恢復我們以前是這樣做的,Camera對象需要重新生成
在onPause的時候,調用如下方法(已經刪除其他跟我們項目相關的邏輯代碼)
/**
* 停止顯示相機畫面</br>
* 若設置了錄制器,會自動關閉錄制器
*/
public void stopPreview() {
synchronized (mCameraLock) {
if (mCamera != null) {
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
}
然後在onResume時,重新獲得Camera對象(通過Camera.open()),
再重新設置previewCallback,SurfaceHolder,Parameters等,最後startPreview
這里可以提醒一下LZ,
打開攝像頭的時間可能會很長,勿在主線程直接打開,否則會有概率出ANR
攝像頭根據設備的不同可能在打開時經常會拋各種異常,記得try,catch
C. Android開發 如何打開前置攝像頭的代碼
找到surficeView
surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
設置它的像素為800x600
surfaceView.getHolder().setFixedSize(800,480);
//下面設置surfaceView不維護自己的緩沖區,而是等待屏幕的渲染引擎將內容推送到用戶面前
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
然後就是回調
surfaceView.getHolder().addCallback(newSurfaceCallback());
上面的回調類是我們自己定義的,代碼如下
private class SurfaceCallback implementsSurfaceHolder.Callback{
@Override
public void surfaceCreated(SurfaceHolderholder) {
try {
camera = Camera.open();//打開硬體攝像頭,這里導包得時候一定要注意是android.hardware.Camera
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);//得到窗口管理器
Display display = wm.getDefaultDisplay();//得到當前屏幕
Camera.Parameters parameters =camera.getParameters();//得到攝像頭的參數
parameters.setPreviewSize(display.getWidth(),display.getHeight());//設置預覽照片的大小
parameters.setPreviewFrameRate(3);//設置每秒3幀
parameters.setPictureFormat(PixelFormat.JPEG);//設置照片的格式
parameters.setJpegQuality(85);//設置照片的質量
parameters.setPictureSize(display.getHeight(),display.getWidth());//設置照片的大小,默認是和屏幕一樣大
camera.setParameters(parameters);
camera.setPreviewDisplay(surfaceView.getHolder());//通過SurfaceView顯示取景畫面
camera.startPreview();//開始預覽
isPreview = true;//設置是否預覽參數為真
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
@Override
public void surfaceChanged(SurfaceHolderholder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolderholder) {
if(camera!=null){
if(isPreview){//如果正在預覽
camera.stopPreview();
camera.release();
}
}
}
}
D. Android Camera怎樣打開關閉閃光燈
在AndroidManifest中注冊相應的許可權:
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.autofocus"/>
打開閃光燈關鍵代碼:
Camera camera = Camera.open();
camera.startPreview();
parameter = camera.getParameters();
parameter.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameter);
關閉閃關燈關鍵代碼:
parameter = camera.getParameters();
parameter.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameter);
E. 如何在android中後台開啟攝像頭默默拍照
(1)CameraActivity.java
package com.camera.test;import android.app.Activity;import android.content.pm.ActivityInfo;import android.os.Bundle;import android.view.Window;import android.view.WindowManager;import android.widget.RelativeLayout;public class CameraActivity extends Activity {private CameraView view;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);requestWindowFeature(Window.FEATURE_NO_TITLE);// 設置橫屏模式以及全屏模式view = new CameraView(this);// 通過一個surfaceview的view來實現拍照view.setId(1);view = new CameraView(this, this);setContentView(R.layout.camera_layout);RelativeLayout relative = (RelativeLayout) this.findViewById(R.id.ly);RelativeLayout.LayoutParams Layout = new RelativeLayout.LayoutParams(3, 3);// 設置surfaceview使其滿足需求無法觀看預覽Layout.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1);Layout.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 1);relative.addView(view, Layout);}}(2) CameraView.javapackage com.camera.test;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Point;import android.graphics.PointF;import android.hardware.Camera;import android.hardware.Camera.AutoFocusCallback;import android.hardware.Camera.ShutterCallback;import android.media.AudioManager;import android.media.FaceDetector;import android.media.FaceDetector.Face;import android.os.Environment;import android.os.Handler;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.widget.Toast;public class CameraView extends SurfaceView implements SurfaceHolder.Callback,Camera.PictureCallback{private SurfaceHolder holder;private Camera camera;private Camera.Parameters parameters;private Activity act;private Handler handler = new Handler();private Context context;private SurfaceView surfaceView;private AudioManager audio;private int current;public CameraView(Context context) {super(context);surfaceView = this;audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);final int current = audio.getRingerMode();audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);this.context = context;holder = getHolder();// 生成Surface Holderholder.addCallback(this);holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 指定Push Bufferhandler.postDelayed(new Runnable() {@Overridepublic void run() {if (camera == null) {handler.postDelayed(this, 1 * 1000);// 由於啟動camera需要時間,在此讓其等兩秒再進行聚焦知道camera不為空} else {camera.autoFocus(new AutoFocusCallback() {@Overridepublic void onAutoFocus(boolean success, Camera camera) {if (success) {camera.takePicture(new ShutterCallback() {// 如果聚焦成功則進行拍照@Overridepublic void onShutter() {}}, null, CameraView.this);} else {}}});}}}, 2 * 1000);}public CameraView(Context context, Activity act) {// 在此定義一個構造方法用於拍照過後把CameraActivity給finish掉this(context);this.act = act;}@Overridepublic void surfaceCreated(final SurfaceHolder holder) {// TODO Auto-generated method stubcamera = Camera.open();// 攝像頭的初始化handler.postDelayed(new Runnable() {@Overridepublic void run() {if (holder != null) {try {camera.setPreviewDisplay(holder);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else {handler.postDelayed(this, 1 * 1000);}}}, 2 * 1000);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stubparameters = camera.getParameters();camera.setParameters(parameters);// 設置參數camera.startPreview();// 開始預覽}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stub}public void onPictureTaken(byte[] data, Camera camera) {// 拍攝完成後保存照片try {Date date = new Date();SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");String time = format.format(date);//在SD卡上創建文件夾File file = new File(Environment.getExternalStorageDirectory()+ "/myCamera/pic");if (!file.exists()) {file.mkdirs();}String path = Environment.getExternalStorageDirectory()+ "/myCamera/pic/" + time + ".jpg";data2file(data, path);camera.setPreviewCallback(null);camera.stopPreview();camera.release();camera = null;holder.removeCallback(CameraView.this);audio.setRingerMode(current);act.finish();//uploadFile(path);} catch (Exception e) {}}private void data2file(byte[] w, String fileName) throws Exception {// 將二進制數據轉換為文件的函數FileOutputStream out = null;try {out = new FileOutputStream(fileName);out.write(w);out.close();} catch (Exception e) {if (out != null)out.close();throw e;}}// private void uploadFile(String filePath)// 拍照過後上傳文件到伺服器// {// }}
F. Android camera重要問題
首先顯示的圖片應該設置為wrap_content,
然後使用系統相機拍照時執行下面這段代碼就行了,最簡單的方式
//使用意圖直接調用照相機
Intentintent=newIntent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
//打開照相機,設置請求碼
startActivityForResult(intent,OPEN_RESULT);
G. android Camera 如何判斷當前使用的攝像頭是前置還是後置
你好!在你打開camera的時候,你會傳入一個cameraId:
public static Camera open (int cameraId)
當你設置了cameraId,打開camera之後,可以通過下面的代碼獲取camera信息:
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
//前置攝像頭
} else { // 後置攝像頭
}
H. Android開發 Camera出現問題Fail to connect to camera service
1,手機上有安裝安全過濾軟體。因為camera屬於較為敏感的許可權,所以,有些手機安全管家會自動拒絕camera的打開操作。
針對這種錯誤,可以在手機安全管家軟體中,降低一下camera的安全級別,或把自己的APP添加到白名單中。
2,AndroidManifest.xml中沒有添加camera的許可權申請,對策則是添加<uses-permission android:name="android.permission.CAMERA"/>許可權申請。
3,之前對camera打開後,並沒有釋放掉。
解決對策就是調用下面的處理
camera.stopPreview();
camera.release();
camera = null;
4,內存佔用過多,可能導致了自己應用可分配的內存不足了。這個場景的錯誤差不多是在自己的應用中打開攝像頭,對攝像頭取得的每一幀數據都進行額外的處理,隨著處理次數的增加,如果有沒被及時銷毀的對象存在,則就極有可能會導致本文開頭出現的異常了。針對此種問題,解決的方法就是仔細檢查臨時創建的對象是否都已經釋放掉。
I. Android開發(攝像頭的調用)(大神請進……)
打開攝像頭,要 start surfaceiew,當activity執行到onStop()時,要判斷,然後關閉surfaceiew。這樣應該就不會導致程序force close了。或者樓主您直接把force close的log信息打出來,有log才能准確的分析問題。