當前位置:
首頁 >
Android多媒体开发:照相机
發布時間:2025/4/16
55
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Android多媒体开发:照相机
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、調用系統照相機和攝像機功能
調用系統攝像頭進行拍照和攝像是通過隱式啟動系統Activity 實現的,無需給自己的工程添加權限,直接調用即可。因此我們只需知道系統照相機和攝像機Activity 的action 和category 就可以了
步驟
1、打開Android 源碼,查看”\packages\apps\”文件文件目錄下的Camera 應用,即系統攝像頭的應用程序。打開其清單文件文件,查看其Activity 的action 和category 信息
2、Camera 類的action 和category 如下
照相機的意圖過濾器
<intent-filter><action android:name="android.media.action.IMAGE_CAPTURE" /><category android:name="android.intent.category.DEFAULT" /> </intent-filter>攝像機的意圖過濾器
<intent-filter><action android:name="android.media.action.VIDEO_CAMERA" /><category android:name="android.intent.category.DEFAULT" /> </intent-filter>3、采用隱式調用的方式調用Activity
由于希望在調用拍照或攝像功能后將結果返回到當前應用的Activity,所以在開啟Activity 時不能使用startActivity 方法,而是使用startActivityForResult 方法開啟Activity,并重寫onActivityResult 方法處理回傳的數據
布局文件比較簡單,界面只有兩個按鈕,一個用于打開照相機,一個用于打開攝像機。這里只給出核心代碼清單
拍照功能核心代碼
public void take(View view){//創建一個Intent 對象Intent intent = new Intent();//設置Actionintent.setAction("android.media.action.IMAGE_CAPTURE");//創建一個文件File file = newFile(Environment.getExternalStorageDirectory().getAbsolutePath(),"my.jpg");//創建uri 對象Uri uri = Uri.fromFile(file);//設置圖片的輸出路徑intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);//開啟ActivitystartActivityForResult(intent, 100);}攝像功能核心代碼
public void video(View view){Intent intent = new Intent();intent.setAction("android.media.action.VIDEO_CAPTURE");File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),"myVedio.mp4");Uri uri = Uri.fromFile(file);intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);startActivityForResult(intent, 101); }二、編碼實現照相功能
使用Camera+SurfaceView 控件可實現自定義照相機功能。接下來我將具體的步驟展示出來
1、編寫布局文件,該布局只有一個SurfaceView 控件和一個Button 作為拍照按鈕
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><SurfaceView android:id="@+id/sv"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"/><Button android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="takeImage"android:text="拍照"/></LinearLayout>2、在清單文件中添加2 個權限信息
添加第一個權限是因為我們代碼使用到系統照相機,第二個是因為我們需要把照好的相片保存到sdcard 上
<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //聲明成員變量private Camera camera;//照相機對象private SurfaceHolder holder;//SurfaceView 的輔助類//獲取SurfaceView 控件的實例,通過其輔助類SurfaceHolder 對象添加CallBack 接口的實現//獲取預覽畫面的SurfaceView 控件SurfaceView surfaceView = (SurfaceView) findViewById(R.id.sv);//得到預覽畫面的輔助類holder = surfaceView.getHolder();//添加回調方法holder.addCallback(new Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {try {//打開攝像頭camera = Camera.open();//設置預覽顯示的位置camera.setPreviewDisplay(holder);//開啟預覽camera.startPreview();} catch (IOException e) {e.printStackTrace();}}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {//停止預覽界面camera.stopPreview();//釋放攝像頭camera.release();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format,int width, int height) {}//添加點擊拍照按鈕的點擊事件:設置攝像頭自動對焦,對焦完成后保存圖片并重新預覽//拍照public void takeImage(View view) {if (camera == null) {Toast.makeText(this, "照相機還沒打開。", Toast.LENGTH_SHORT).show();return;}//點擊拍照按鈕,攝像頭自動對焦,對焦完成后拍照并保存camera.autoFocus(new AutoFocusCallback() {@Overridepublic void onAutoFocus(boolean success, Camera camera) {//對焦完成,拍照并保存camera.takePicture(null, null, new PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {//設置照片保存路徑String path =Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +UUID.randomUUID().toString() + ".jpg";try {FileOutputStream outputStream = new FileOutputStream(path);//將照片字節數組寫到文件中outputStream.write(data);outputStream.close();//重新開啟預覽camera.startPreview();} catch (Exception e) {e.printStackTrace();}}});}});}三、總結
Camera
| open() | 打開攝像頭 |
| release() | 釋放攝像頭 |
| setPreviewDisplay() | 設置預覽顯示的位置 |
| startPreview() | 開啟預覽 |
| stopPreview() | 停止預覽界面 |
| autoFocus() | AutoFocusCallback |
| takePicture() | 對焦完成 |
總結
以上是生活随笔為你收集整理的Android多媒体开发:照相机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android多媒体开发
- 下一篇: Android多媒体开发:录音机