導航:首頁 > 操作系統 > android打開camera

android打開camera

發布時間:2022-08-30 01:41:07

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重要問題

  1. 首先顯示的圖片應該設置為wrap_content,

  2. 然後使用系統相機拍照時執行下面這段代碼就行了,最簡單的方式


//使用意圖直接調用照相機

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才能准確的分析問題。

閱讀全文

與android打開camera相關的資料

熱點內容
反編譯ref 瀏覽:546
鴻蒙智能文件夾怎麼弄 瀏覽:544
grunt壓縮html 瀏覽:787
macpdfword轉換器 瀏覽:904
壓縮面膜是什麼材質 瀏覽:353
抖音發布作品怎麼建文件夾 瀏覽:13
安卓如何更改谷歌地區 瀏覽:273
airpods為什麼安卓連上聲音很大 瀏覽:510
聯想伺服器按鈕怎麼開不了機 瀏覽:93
蘋果xrapp程序庫沒有了怎麼辦 瀏覽:843
在上海程序員一個月多少工資 瀏覽:326
k歌解壓圖片 瀏覽:579
cad中清理多餘圖層的命令 瀏覽:989
華為nova8xe是安卓什麼 瀏覽:58
湯姆貓伺服器為什麼免費 瀏覽:274
safenet加密狗怎麼用 瀏覽:41
phpsql查詢變數 瀏覽:104
地磅儀表盤加密方法 瀏覽:480
brew安裝php環境 瀏覽:829
電腦版釘釘如何加密 瀏覽:709