日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Android使用系統(tǒng)相機進行拍照的步驟

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

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

調用系統(tǒng)相機步驟

這里我通過一個簡單的例子來講這個內容。我自己寫了一個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,但是可不可以直接把地址當成參數發(fā)過去呢?這里就要用到特殊的內容提供器FileProvider。上面就是調用相機要用到的內容,雖然用的都很淺,但是都會涉及到。接下來看看具體怎么實現(xiàn)。看看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) { //創(chuàng)建一個File對象。getExternalCacheDir()獲取應用的緩存目錄,outputImage.jpg是照片名稱 File outputImage = new File(getExternalCacheDir(),'outputImage.jpg'); try{ //創(chuàng)建一個空文件 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); } });

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

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

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

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

好了這樣就完成了拍照并把照片儲存的步驟了。接下來還差什么?對了,把照片顯示出來。現(xiàn)在在內存中已經有這個照片了,而且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傳輸到別的應用,而我們要把地址送給相機,所以就會出現(xiàn)問題了。詳細可以查閱這篇博客: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是后面映射用到的,可以自己隨便起,我這里用一橫桿表示整個目錄可以被訪問。

小結

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

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

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩电影免费在线观看| 红桃视频国产精品| 视频一区二区不卡| 亚洲网站视频| 99热精品久久| 欧美69视频| 亚洲国产一区二区三区在线播放| 亚洲一级特黄| 国产精品毛片| 日本不卡视频在线观看| 国产精品欧美日韩一区| 国产劲爆久久| 在线一区视频| 精品一区毛片| 亚洲日韩中文字幕一区| 国产精品中文字幕制服诱惑| 国模精品一区| 91精品一区二区三区综合在线爱| 亚洲免费激情| 国产在视频一区二区三区吞精| 在线日韩视频| 久久狠狠久久| 国产精品丝袜xxxxxxx| 一二三区精品| 国产综合视频| 国产成人免费av一区二区午夜| 青青伊人久久| 国产精品美女久久久久久不卡| 激情婷婷欧美| 麻豆成人在线| 久久中文视频| 激情视频网站在线播放色| 国产日韩欧美| 欧美激情一区| 国产精品手机在线播放| 九九九精品视频| 亚洲精品在线影院| 中国女人久久久| 国产精品视频首页| 日韩在线中文| 亚洲免费专区| 日韩av自拍| 日韩一区欧美二区| 麻豆精品视频在线观看视频| 99久久夜色精品国产亚洲狼| 911亚洲精品| 婷婷成人av| 好吊一区二区三区| 久久夜色精品| 亚洲午夜91| 久久亚洲专区| 欧美1区免费| 亚欧洲精品视频在线观看| 午夜久久99| 精品一区亚洲| 激情欧美一区| 日韩一区二区三免费高清在线观看| 久久精品成人| 久久狠狠婷婷| 欧美日韩视频免费观看| 欧美日韩国产观看视频| 色88888久久久久久影院| 亚洲手机在线| 亚洲三级av| 国产精品亚洲片在线播放| 国产+成+人+亚洲欧洲在线| 久久影院一区二区三区| 亚洲欧美日韩视频二区| 中文字幕亚洲影视| 黄毛片在线观看| 亚洲精品裸体| 久久久国产亚洲精品| 欧美亚洲专区| 亚洲中午字幕| 国产精品超碰| 欧美亚洲在线日韩| 丝袜美腿一区二区三区| 日韩av黄色在线| 欧美黄色精品| 欧美色图一区| 国产农村妇女精品一区二区| 日韩av一级片| 欧美中文一区二区| 欧美激情视频一区二区三区免费 | 天海翼亚洲一区二区三区| 国产亚洲一卡2卡3卡4卡新区| 欧美韩一区二区| 亚洲专区一区| 久久香蕉精品香蕉| 亚洲3区在线| 色8久久久久| 欧美日韩国产在线观看网站| 欧美激情福利| 精品入口麻豆88视频| 亚洲欧美日本国产专区一区| 超碰99在线| 97se亚洲| 久久视频国产| 成人三级高清视频在线看| 国产剧情一区二区在线观看| 蜜桃久久精品一区二区| 亚洲精品国产嫩草在线观看 | 四季av一区二区凹凸精品| 久久国产日韩欧美精品| 亚洲精品在线影院| 美女精品在线| 久久精品亚洲欧美日韩精品中文字幕| 国产午夜精品一区在线观看| 精品国产欧美| 亚洲精品观看| 日韩区欧美区| 日韩国产在线观看一区| 在线观看视频免费一区二区三区| 亚洲高清久久| 亚洲中字黄色| 日韩av中文字幕一区| 欧美视频二区| 精品日韩在线| 国产精品欧美大片| 亚洲天堂日韩在线| 欧美日韩一区自拍| 国产剧情一区二区在线观看| 欧美亚洲免费| 中文精品电影| 亚洲天堂久久| 国产一区二区三区亚洲综合| 午夜精品影院| 久久久人人人| 国产精品毛片一区二区三区| se01亚洲视频| 亚洲一区激情| 免费视频久久| 日韩精品一二三| 一级欧美视频| 91精品国产一区二区在线观看| 日韩极品在线观看| 国产精品一区二区中文字幕| 激情久久婷婷| 亚洲婷婷在线| 欧美日韩在线观看首页| 婷婷精品在线观看| 欧美亚洲激情| 精品国产一区二区三区噜噜噜| 欧美一区免费| 亚洲人成亚洲精品| 日韩一区二区三区四区五区| 国产视频一区二| 久久xxxx| 欧产日产国产精品视频| 天堂精品久久久久| 男女激情视频一区| 先锋影音国产一区| 欧美日韩少妇| 日韩一级精品| 国产欧美日韩视频在线| 啪啪亚洲精品| 久久免费影院| 国产精品一区二区精品视频观看| 日本91福利区| 日韩中文首页| 婷婷中文字幕一区| 亚洲高清av| 国产一区 二区| 亚洲精品在线国产| 国产日韩三级| 国产videos久久| 亚洲精品在线观看91| av亚洲免费| 欧美精品一线| 亚洲欧洲一区| 国产成年精品| 国产精品欧美大片| 免费精品视频在线| 成人精品亚洲| 免费福利视频一区二区三区| 国产九九精品| 久久狠狠久久| 国产日韩欧美在线播放不卡| 日韩极品在线观看| 国产韩日影视精品| 吉吉日韩欧美| 亚洲免费成人| 免费日韩一区二区三区| 成人日韩av| 亚洲一区国产| 国产精品黄网站| 午夜国产欧美理论在线播放| 国产精品欧美日韩一区| 黄色不卡一区| 欧美极品一区二区三区| 91久久午夜| 久久精品国产99国产| 99pao成人国产永久免费视频 | 狠狠操综合网| 国产一卡不卡| 成人av二区| 国产日产一区| 国产日产一区| 国产精品草草| 国产精品视频一区二区三区|