android studio之簡單呼叫攝像頭並且獲取其照片
1.首先讓我們來理清一下其中的邏輯:拍一張照片,獲取其路徑,根據路徑進行展示。
2.好了我們已經理清好邏輯了:那我們就想如何實現,首先我們要實現一個app呼叫拍照功能,很簡單,我們學過用一個活動呼叫另一個活動的intent,很明顯是有的,然後我們要如何讓拍到的照片返回到我們的app呢,還記得intent有一個putExtra的功能對吧,它用於傳輸資料,但是它在啟動一個攝像頭媒體的時候作用就不同了,它會根據傳輸進去的不同鍵值而發揮不同的作用,而設定圖片路徑就是其中一個,它還有其他不同的功能,例如設定圖片大小等,需要的可以自己去查,但這個鍵值需求第二個引數為一個uri,那麼我們可以自己新建一個檔案,並且生成它的uri,這樣不就可以了嗎?這個檔案新建在哪裡也是一個問題,android為我們提供了一個叫做app關聯快取目錄的東西,那我們存在哪裡可以了。下面給出具體程式碼。
3.程式碼:
1.主活動
package com.example.gdzc.cameraalbumtest;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
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_POTHO=1;
private ImageView imageView;
private Button button;
private Uri uri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView)findViewById(R.id.picture);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
File outImage=new File(getExternalCacheDir(),"output_image.jpg");
try{
if(outImage.exists())
{
outImage.delete();
}
outImage.createNewFile();
}
catch (IOException e)
{
e.printStackTrace();
}
if(Build.VERSION.SDK_INT>=24)
{
uri= FileProvider.getUriForFile(MainActivity.this,"com.example.gdzc.cameraalbumtest.fileprovider",outImage);
}
else
{
uri=Uri.fromFile(outImage);
}
Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
startActivityForResult(intent,TAKE_POTHO);
}
});
}
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
switch (requestCode)
{
case TAKE_POTHO:
if(resultCode==RESULT_OK)
{
try{
Bitmap bitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
imageView.setImageBitmap(bitmap);
}catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
break;
default:
break;
}
}
}
2.主佈局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/button"
android:text="Button"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:layout_gravity="center_horizontal"
android:id="@+id/picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
3.登錄檔:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gdzc.cameraalbumtest">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>//關聯目錄的許可權
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:authorities="com.example.gdzc.cameraalbumtest.fileprovider"//必須與生成時uri的第二個引數相同
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">//還沒有要我們自己建
</meta-data>
</provider>
</application>
</manifest>
4.共享路徑的檔案:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="12"
path="">//若為空那麼就共享整個sd卡,也可以寫具體的我們新建檔案的路徑
</external-path>
</paths>
相關文章
- Android呼叫攝像頭拍照並顯示照片Android
- 照片系列之android呼叫攝像頭拍照Android
- Android呼叫攝像頭拍照Android
- 在Android中呼叫攝像頭拍照並顯示出來Android
- android studio呼叫攝像頭拍照及具體步驟演示程式碼Android
- 簡單介紹C#呼叫USB攝像頭的方法C#
- 安卓開發之呼叫攝像頭安卓
- matlab呼叫攝像頭並儲存成幀的形式Matlab
- jQuery webcam plugin呼叫攝像頭jQueryWebPlugin
- 安卓呼叫攝像頭拍照安卓
- android 開啟攝像頭Android
- android opencv 前置攝像頭AndroidOpenCV
- web呼叫攝像頭拍照並上傳到伺服器Web伺服器
- Jetson AGX Xavier ROS下呼叫USB單目攝像頭ROS
- Android中呼叫攝像頭拍照儲存,並在相簿中選擇圖片顯示Android
- html5呼叫攝像頭功能HTML
- 教你如何利用python呼叫攝像頭Python
- HTML5如何呼叫攝像頭?HTML
- Android提供的攝像頭拍照Android
- Python基於opencv呼叫攝像頭獲取個人圖片PythonOpenCV
- 純JavaScript實現的呼叫裝置攝像頭並拍照的功能JavaScript
- 簡單介紹C#獲取攝像頭拍照顯示影像的方法C#
- html5呼叫攝像頭截圖HTML
- [譯]Android的多攝像頭支援Android
- [譯] Android 的多攝像頭支援Android
- Android CameraX 開啟攝像頭預覽Android
- Android 攝像頭預覽懸浮窗Android
- 瀏覽器呼叫攝像頭進行拍照程式瀏覽器
- Unity 3d UI獲取外部攝像頭拍攝Unity3DUI
- Nebulosity 4 for Mac(攝像頭影像捕獲工具)Mac
- html5中呼叫攝像頭拍照並上傳(附繞過https的想法)HTMLHTTP
- 【Android】【opencv】實現攝像頭拍照和錄影AndroidOpenCV
- 攝像頭操作指南
- 【音影片】攝像頭
- WPF呼叫攝像頭,對圖片相似度識別 1.0
- Ubuntu系統怎麼呼叫攝像頭和麥克風Ubuntu
- ToDesk勾上攝像頭會看到我嗎?如何關閉攝像頭
- WebRTC從攝像頭獲取圖片傳入canvasWebCanvas