电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android使用系統相機進行拍照的步驟

瀏覽:23日期:2022-09-21 14:34:06
前言

我們在日常的開發中有時候會遇到需要用到相機的需求,而相機也是很常用的東西,例如掃二維碼啊拍照上傳啊等等。這里我不講像qq那樣自定義很強的拍照功能(事實上我也不會),講個最簡單的調用系統相機拍照并儲存

調用系統相機步驟

這里我通過一個簡單的例子來講這個內容。我自己寫了一個demo,布局很簡單:

<Button android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_marginTop='4dp' android:text='take phone' app:layout_constraintEnd_toEndOf='parent' app:layout_constraintHorizontal_bias='0.281' app:layout_constraintStart_toStartOf='parent' app:layout_constraintTop_toTopOf='parent' /> <ImageView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_marginTop='29dp' app:layout_constraintEnd_toEndOf='parent' app:layout_constraintStart_toStartOf='parent' app:layout_constraintTop_toBottomOf='@+id/button' app:srcCompat='@mipmap/ic_launcher_round' />

就是一個按鈕點擊彈起相機,然后一個imageView顯示拍到的照片。

接下來我想一下調用的整個過程我們需要做什么:首先彈起相機肯定要跳到相機這個應用,那么就必須通過隱性啟動相機的活動。然后當我們返回應用的時候,還要將照片顯示,所以這里就要用到startActivityForResult這個方法。其次,我們拍照之后肯定要進行儲存的,那么就涉及到文件的操作。涉及到內存的操作就肯定要和權限打交道,所有還有權限相關的內容。最后還有一個問題就是,相機拍完照是要儲存照片的,所以我們要給他一個地址uri,但是可不可以直接把地址當成參數發過去呢?這里就要用到特殊的內容提供器FileProvider。上面就是調用相機要用到的內容,雖然用的都很淺,但是都會涉及到。接下來看看具體怎么實現。看看Activity中的onCreate的代碼:

private Uri imageUri; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = findViewById(R.id.imageView); Button button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //創建一個File對象。getExternalCacheDir()獲取應用的緩存目錄,outputImage.jpg是照片名稱 File outputImage = new File(getExternalCacheDir(),'outputImage.jpg'); try{ //創建一個空文件 outputImage.createNewFile(); }catch (IOException e){ e.printStackTrace(); } //不同的安卓版本對用不同的獲取Uri的方法 if (Build.VERSION.SDK_INT>=24){ imageUri =FileProvider.getUriForFile(MainActivity.this,'huan',outputImage); }else{ imageUri = Uri.fromFile(outputImage); } //啟動相機的對應Activity Intent intent = new Intent('android.media.action.IMAGE_CAPTURE'); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); startActivityForResult(intent,1); } });

我們來看看這里的代碼:前面的代碼很簡單就是控件的初始化。我們知道照片是要放文件夾得,所以這里要創建一個File對象,指定文件的路徑以及名字。這里路徑為什么要用getExternalCacheDir()呢?因為每個應用都有對應得緩存目錄,訪問這些目錄得時候不用訪問內存權限,這樣得話就可以省去需求權限得步驟啦。這個目錄在/scare/Android/data//cache。

然后我們再創建一個空的文件夾。這里如果已經有照片了的話例如我們第二次拍照的時候,那么就不會創建新的空文件夾了。直到儲存的時候才會被替換掉。

然后我們剛才講到,拍到的圖片要在我們的應用中展示,那么就必須用到內容提供器。這里用到FileProvider來獲取uri,關于provider我在下文有講到可以如果是低于4.4版本的安卓就用Uri.fromFile(outputImage);方法可以獲取到uri

再通過隱式啟動相機activity可以打開相機了。這里系統相機的action是android.media.action.IMAGE_CAPTURE,相機儲存路徑的參數名字是MediaStore.EXTRA_OUTPUT,并把uri傳輸進去。

好了這樣就完成了拍照并把照片儲存的步驟了。接下來還差什么?對了,把照片顯示出來。現在在內存中已經有這個照片了,而且uri也知道,所以就很容易了,看代碼:

@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if (requestCode == 1) { if (resultCode == RESULT_OK) try { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); imageView.setImageBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); } } }

我們剛才使用startActivityForResult來啟動活動的,所以就要重寫這個方法來顯示圖片了。這里首先判斷是哪個啟動命令,然后再判斷是否成功啟動,再BitmapFactory.decodeStream這個方法來獲取bitmap,再把bitmap顯示出來就行了。BitmapFactory.decodeStream這個方法需要一個流,可以通過getContentResolver().openInputStream這個方法來開啟一個流。

到此整個流程就解決了。

FileProvider

FileProvider是一個特殊的內容提供器,可以把一個file開頭的uri改成content開頭的,例如:file://uri -> content://uri。那為什么要這么做呢?這里簡單講一下:這個是因為在Android 7.0之后,官方禁止直接把一個真實路徑的uri傳輸到別的應用,而我們要把地址送給相機,所以就會出現問題了。詳細可以查閱這篇博客:Android 7.0 行為變更 通過FileProvider在應用間共享文件吧

既然是內容提供器那么肯定是要進行注冊的:

<provider android:name='android.support.v4.content.FileProvider' android:authorities='huan' android:exported='false' android:grantUriPermissions='true'> <meta-data android:name='android.support.FILE_PROVIDER_PATHS' android:resource='@xml/file_paths' /> </provider>

這里的authorities參數必須和前面的getUriForFile方法的第二個參數保持一致,同個內容提供器的authorities肯定要一樣啦。grantUriPermissions參數一定要是true,這個的大概意思就是給他的所有元素授權可以被訪問,在FileProvider中這個參數必須是true(這也是為什么在4.4一下版本的安卓無法使用的原因之一,有興趣可以去了解一下)export這個參數表示可不可以給其他的應用共享,這里要設置為false。<meta-data這個是配置我們可以訪問的文件路徑,@xml/file_paths這個就是表示什么文件可以被訪問,當然要建一個這個文件。看代碼:

<?xml version='1.0' encoding='utf-8'?><paths xmlns:android='http://schemas.android.com/apk/res/android'> <external-path name='my_image' path='/'/></paths>

<external-path這個就是表示可以被訪問的路徑,name是后面映射用到的,可以自己隨便起,我這里用一橫桿表示整個目錄可以被訪問。

小結

調用系統相機的功能雖然不難,代碼也不多,但是其中的零碎知識很多,零零散散,還是要注意的。特別是關于低高配的安卓版本問題還是要特別注意一下。

以上就是Android使用系統相機進行拍照的步驟的詳細內容,更多關于Android 適用系統相機的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 砂尘试验箱_淋雨试验房_冰水冲击试验箱_IPX9K淋雨试验箱_广州岳信试验设备有限公司 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 一级建造师培训_一建培训机构_中建云筑建造师培训网校 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 小程序开发公司-小程序制作-微信小程序开发-小程序定制-咏熠软件 | 写方案网_方案策划方案模板下载| 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 防伪溯源|防窜货|微信二维码营销|兆信_行业内领先的防伪防窜货数字化营销解决方案供应商 | 石膏基自流平砂浆厂家-高强石膏基保温隔声自流平-轻质抹灰石膏粉砂浆批发-永康市汇利建设有限公司 | 土壤水分自动监测站-SM150便携式土壤水分仪-铭奥仪器 | 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | 电子厂招聘_工厂招聘_普工招聘_小时工招聘信息平台-众立方招工网 | 空气能采暖,热泵烘干机,空气源热水机组|设备|厂家,东莞高温热泵_正旭新能源 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 联系我们老街华纳娱乐公司官网19989979996(客服) | 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 鑫铭东办公家具一站式定制采购-深圳办公家具厂家直销 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 济南电缆桥架|山东桥架-济南航丰实业有限公司| 灰板纸、灰底白、硬纸板等纸品生产商-金泊纸业 | 超声波分散机-均质机-萃取仪-超声波涂料分散设备-杭州精浩 | 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 冲锋衣滑雪服厂家-冲锋衣定制工厂-滑雪服加工厂-广东睿牛户外(S-GERT) | 南京技嘉环保科技有限公司-杀菌除臭剂|污水|垃圾|厕所|橡胶厂|化工厂|铸造厂除臭剂 | 江苏密集柜_电动_手动_移动_盛隆柜业江苏档案密集柜厂家 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 论文查重_免费论文查重_知网学术不端论文查重检测系统入口_论文查重软件 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | SF6环境监测系统-接地环流在线监测装置-瑟恩实业 | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 | 玻璃瓶厂家_酱菜瓶厂家_饮料瓶厂家_酒瓶厂家_玻璃杯厂家_徐州东明玻璃制品有限公司 | 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 |