安卓呼叫攝像頭拍照
安卓呼叫攝像頭拍照
本節所涉及到的新單詞:
External[一克s'特羅] 外部的 Environment [印'歪仁悶特] 環境 storage [s'託瑞幾] 貯存 emulated ['e母優特得] 模擬 capture ['凱拍切] 捕獲 build [bild] 構建 version [‘喂兒忍] 版本
第一步:新建一個佈局
<?xml version="1.0" encoding="utf-8"?>
在這個佈局中只有一個拍照按鈕和一個圖片顯示按鈕
第二步:寫MainActivity.java檔案
public class MainActivity extends AppCompatActivity implements View.OnClickListener { //startActivityForResult跳轉後,回撥函式onActivityResult中要使用此標記 public static final int TAKE_PHOTO=1; //影像 private ImageView picture; //拍完照後照片的地址 private Uri imageUri; @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (TAKE_PHOTO) { case TAKE_PHOTO: if (resultCode == RESULT_OK) { try { //把拍得照片轉為java的Bitmap物件 Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); //在控制元件上顯示出來 picture.setImageBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); } } break; default: break; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button takePhoto=(Button)findViewById(R.id.take_photo); picture=(ImageView)findViewById(R.id.picture); takePhoto.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.take_photo: File outputImage=new File(getExternalCacheDir(),"output_image.jpg"); //String strFile=outputImage.toString(); //Log.d("MainActivity", strFile); //如果己存在,就刪除它,否則就新建它 try{ if(outputImage.exists()){ outputImage.delete(); } outputImage.createNewFile(); }catch (IOException e){ e.printStackTrace(); } //安卓7.0以上版本 if(Build.VERSION.SDK_INT>=24){ //如果是安卓7.0以上版本,地址從檔案共享器中取出 imageUri= FileProvider.getUriForFile(MainActivity.this,"com.jintingbo.cameraalbumtest.fileprovider",outputImage); }else{ imageUri=Uri.fromFile(outputImage); } //呼叫照像機 Intent intent=new Intent("android.media.action.IMAGE_CAPTURE"); //Android自定義裁切輸出位置 MediaStore.EXTRA_OUTPUT intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); //有回撥的跳轉 startActivityForResult(intent,TAKE_PHOTO); break; default: break; } } } 第三步:在AndroidManifest.xml檔案中新增<provide></provide>和許可權 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jintingbo.cameraalbumtext"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <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.jintingbo.cameraalbumtext" android:name="androidx.core.content.FileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> </application> </manifest> 問與答: 1、線上性佈局中android:layout_gravity="center_horizontal"是什麼意思? 答:水平居中。 2、android:layout_gravity和android:gravity的區別 Gravity [瓜為蒂] 重力 android:gravity: 這個是針對控制元件裡的元素來說的,用來控制元素在該控制元件裡的顯示位置。例如,在一個Button按鈕控制元件中設定如下兩個屬性,android:gravity="left"和android:text="提交",這時Button上的文字“提交”將會位於Button的左部。 android:layout_gravity: 這個是針對控制元件本身而言,用來控制該控制元件在包含該控制元件的父控制元件中的位置。同樣,當我們在Button按鈕控制元件中設定android:layout_gravity="left"屬性時,表示該Button按鈕將位於介面的左部。 特殊情況: 當我們採用LinearLayout佈局時,有以下特殊情況需要我們注意: (1)當 android:orientation="vertical" 時, android:layout_gravity只有水平方向的設定才起作用,垂直方向的設定不起作用。即:left,right,center_horizontal 是生效的。 (2)當 android:orientation="horizontal" 時, android:layout_gravity只有垂直方向的設定才起作用,水平方向的設定不起作用。即:top,bottom,center_vertical 是生效的。 3、安卓如何將某個即將存檔的檔案設定到快取目錄中? 答:File outputImage=new File(getExternalCacheDir(),"output_image.jpg"); 可將output_image.jpg檔案儲存到 /storage/emulated/0/Android/data/包名/cache/output_image.jpg 4、安卓7.0以上版本和7.0以下版本是如何求手機中圖片地址物件的? 答:Build.VERSION.SDK_INT>=24就是7.0及以上版本。 安卓7.0以上版本是通過檔案共享器求得地址物件的。例項如下: if(Build.VERSION.SDK_INT>=24){ imageUri= FileProvider.getUriForFile(MainActivity.this,"com.jintingbo.cameraalbumtest.fileprovider",outputImage); }else{ imageUri=Uri.fromFile(outputImage); } 其中outputImage中檔案File物件。 5、假設手機中有一張圖片,它的儲存地址是在java物件imageUri物件之中,如何這張圖片轉為java的Bitmap物件 答: Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); 6、呼叫照像機的語句是: Intent intent=new Intent("android.media.action.IMAGE_CAPTURE"); 7、Android自定義裁切輸出位置是什麼?程式中如何使用? 答:是MediaStore.EXTRA_OUTPUT 使用時,它是作為Intent.putExtra()的鍵使用的,比如: intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); 其中imageUri是手機中圖片的地址。 8、getExternalCacheDir()所指的路經是在手機上的哪裡? 答: /storage/emulated/0/Android/data/包名/cache/output_image.jpg |
相關文章
- Android呼叫攝像頭拍照Android
- 安卓開發之呼叫攝像頭安卓
- 照片系列之android呼叫攝像頭拍照Android
- Android呼叫攝像頭拍照並顯示照片Android
- 瀏覽器呼叫攝像頭進行拍照程式瀏覽器
- Android提供的攝像頭拍照Android
- web呼叫攝像頭拍照並上傳到伺服器Web伺服器
- 在Android中呼叫攝像頭拍照並顯示出來Android
- UVC攝像頭按鍵拍照功能
- 純JavaScript實現的呼叫裝置攝像頭並拍照的功能JavaScript
- android studio呼叫攝像頭拍照及具體步驟演示程式碼Android
- jQuery webcam plugin呼叫攝像頭jQueryWebPlugin
- HTML5如何呼叫攝像頭?HTML
- 教你如何利用python呼叫攝像頭Python
- html5呼叫攝像頭功能HTML
- 【Android】【opencv】實現攝像頭拍照和錄影AndroidOpenCV
- html5中呼叫攝像頭拍照並上傳(附繞過https的想法)HTMLHTTP
- html5呼叫攝像頭截圖HTML
- Android中呼叫攝像頭拍照儲存,並在相簿中選擇圖片顯示Android
- iPhone XS/iPhone XS Max攝像頭拍照解析:蘋果也玩起了AI拍照iPhone蘋果AI
- python版opencv:如何用筆記本攝像頭拍照儲存PythonOpenCV筆記
- Jetson AGX Xavier ROS下呼叫USB單目攝像頭ROS
- matlab呼叫攝像頭並儲存成幀的形式Matlab
- AndroidCamera2拍照(三)——切換攝像頭,延時拍攝和閃光模式Android模式
- 【音影片】攝像頭
- 攝像頭操作指南
- WPF呼叫攝像頭,對圖片相似度識別 1.0
- Ubuntu系統怎麼呼叫攝像頭和麥克風Ubuntu
- 簡單介紹C#呼叫USB攝像頭的方法C#
- ToDesk勾上攝像頭會看到我嗎?如何關閉攝像頭
- 簡單介紹C#獲取攝像頭拍照顯示影像的方法C#
- 如何在SAP UI5應用裡新增使用攝像頭拍照的功能UI
- 樹莓派上安裝USB網路攝像頭樹莓派
- Web呼叫網路攝像頭及各類錯誤處理Web
- Python基於opencv呼叫攝像頭獲取個人圖片PythonOpenCV
- android studio之簡單呼叫攝像頭並且獲取其照片Android
- .NET 攝像頭採集
- android opencv 前置攝像頭AndroidOpenCV