android studio呼叫攝像頭拍照及具體步驟演示程式碼
演示程式碼的功能,呼叫攝像頭拍照,成功的話則把照片顯示出來。
第一步 定義一個按鈕用於呼叫攝像頭拍照,ImageView用於存放顯示拍出的照片。
<Button
android:id="@+id/take_photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="take photo"
/>
<ImageView
android:id="@+id/picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
/>
第二步 開始編寫呼叫攝像頭的具體邏輯
package example.com.test;
//邏輯,先建立檔案,之後把它封裝成uri物件,之後封裝帶intent中,呼叫攝像頭,之後呼叫過後會有一個
//返回結果,成功的話就把它顯示出來
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
public static final int TAKE_PHOTO=1;//宣告一個請求碼,用於識別返回的結果
private ImageView picture;
private Uri imageUri;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button takephoto=findViewById(R.id.take_photo);
picture=findViewById(R.id.picture);
takephoto.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
File outputImage=new File(getExternalCacheDir(),"output_image.jpg");
/*
建立一個File檔案物件,用於存放攝像頭拍下的圖片,我們把這個圖片命名為output_image.jpg
並把它存放在應用關聯快取目錄下,呼叫getExternalCacheDir()可以得到這個目錄,為什麼要
用關聯快取目錄呢?由於android6.0開始,讀寫sd卡列為了危險許可權,使用的時候必須要有許可權,
應用關聯目錄則可以跳過這一步
*/
try//判斷圖片是否存在,存在則刪除在建立,不存在則直接建立
{
if(outputImage.exists())
{
outputImage.delete();
}
outputImage.createNewFile();
}
catch (IOException e)
{
e.printStackTrace();
}
if(Build.VERSION.SDK_INT>=24)
//判斷安卓的版本是否高於7.0,高於則呼叫高於的方法,低於則呼叫低於的方法
//把檔案轉換成Uri物件
/*
之所以這樣,是因為android7.0以後直接使用本地真實路徑是不安全的,會丟擲異常。
FileProvider是一種特殊的內容提供器,可以對資料進行保護
*/
{
imageUri= FileProvider.getUriForFile(MainActivity.this,
"com.example.cameraalbumtest.fileprovider",outputImage);
/*
第一個引數:context物件
第二個引數:任意唯一的字串
第三個引數:檔案物件
*/
}
else {
imageUri=Uri.fromFile(outputImage);
}
//使用隱示的Intent,系統會找到與它對應的活動,即呼叫攝像頭,並把它儲存
Intent intent=new intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
startActivityForResult(intent,TAKE_PHOTO);
//呼叫會返回結果的開啟方式,返回成功的話,則把它顯示出來
}
});
}
//處理返回結果的函式,下面是隱示Intent的返回結果的處理方式,具體見以前我所發的intent講解
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode)
{
case TAKE_PHOTO:
if(resultCode==RESULT_OK)
{
try
{
Bitmap bitmap= BitmapFactory.decodeStream(getContent-
Resolver().openInputStream(imageUri));
picture.setImageBitmap(bitmap);
//將圖片解析成Bitmap物件,並把它顯現出來
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
break;
default:
break;
}
}
}
第三步 剛剛我們提到了內容提供器,所以我們現在內容提供器在manifest.xml中進行註冊,其中android:name的值是固定的,
android:authorities的值必須和FileProvider.getUriForFile的第二個引數是一致的,在這裡面我們還利用了<meta-data來制定uri路徑,並引用一個資源,當然這個資源還未建立,我們在第四步建立它。
<provider
android:authorities="com.example.cameraalbumtest.fileprovider"
android:name="android.support.v4.content.FileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
第四步 在res目錄下建立一個xml目錄,目錄是directory,之後在這個目錄下,建立一個xml原始檔,修改程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="my_images"
path=""/>
</paths>
其中 <external-path用於指定uri共享的,名字可以隨便填,path為空表示可以共享整個sd卡
第五步 為了相容老版本的安卓系統,我們還是打算新增一條許可權,用於宣告訪問sd卡的許可權。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
相關文章
- Android呼叫攝像頭拍照Android
- 照片系列之android呼叫攝像頭拍照Android
- Android呼叫攝像頭拍照並顯示照片Android
- 安卓呼叫攝像頭拍照安卓
- Android提供的攝像頭拍照Android
- 瀏覽器呼叫攝像頭進行拍照程式瀏覽器
- 在Android中呼叫攝像頭拍照並顯示出來Android
- android studio之簡單呼叫攝像頭並且獲取其照片Android
- 【Android】【opencv】實現攝像頭拍照和錄影AndroidOpenCV
- web呼叫攝像頭拍照並上傳到伺服器Web伺服器
- UVC攝像頭按鍵拍照功能
- Android中呼叫攝像頭拍照儲存,並在相簿中選擇圖片顯示Android
- 純JavaScript實現的呼叫裝置攝像頭並拍照的功能JavaScript
- Android Studio 呼叫Camera實現拍照功能Android
- jQuery webcam plugin呼叫攝像頭jQueryWebPlugin
- android 開啟攝像頭Android
- android opencv 前置攝像頭AndroidOpenCV
- Win10如何重灌攝像頭驅動_win10系統重灌攝像頭驅動步驟Win10
- html5呼叫攝像頭功能HTML
- 教你如何利用python呼叫攝像頭Python
- HTML5如何呼叫攝像頭?HTML
- html5中呼叫攝像頭拍照並上傳(附繞過https的想法)HTMLHTTP
- 安卓開發之呼叫攝像頭安卓
- html5呼叫攝像頭截圖HTML
- Web呼叫網路攝像頭及各類錯誤處理Web
- [譯]Android的多攝像頭支援Android
- [譯] Android 的多攝像頭支援Android
- 搭建一個攝像頭應用程式 應用程式內部攝像頭
- Android studio的安裝步驟Android
- iPhone XS/iPhone XS Max攝像頭拍照解析:蘋果也玩起了AI拍照iPhone蘋果AI
- 【硬體裝置】海康NVR硬碟錄影機接入海康RTSP攝像頭操作步驟VR硬碟
- 淘寶/天貓新增到購物車 API 呼叫詳情步驟(程式碼演示)API
- Android 圓形頭像 相簿和拍照裁剪選取Android
- Android CameraX 開啟攝像頭預覽Android
- Android 攝像頭預覽懸浮窗Android
- Android開發,《第一行程式碼(第三版)》呼叫攝像頭崩潰解決方法Android行程
- WIN10膝上型電腦攝像頭的開啟步驟_筆記本win10攝像頭怎麼開啟Win10筆記
- android層java如何呼叫cocos2dx c++程式碼 步驟AndroidJavaC++