欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android無需權(quán)限調(diào)起系統(tǒng)相機

 更新時間:2023年03月22日 17:07:59   作者:5944254635000  
在進(jìn)行一些小型APP的開發(fā),或者是對拍照界面沒有自定義要求時,我們可以用調(diào)起系統(tǒng)相機的方式快速完成拍照需求

在進(jìn)行一些小型APP的開發(fā),或者是對拍照界面沒有自定義要求時,我們可以用調(diào)起系統(tǒng)相機的方式快速完成拍照需求

和不需讀寫權(quán)限進(jìn)行讀寫操作的方案一樣,都是通過Intent啟動系統(tǒng)的activity讓用戶進(jìn)行操作,系統(tǒng)再將用戶操作的結(jié)果告訴我們,因為過程對APP是完全透明的,所以不會侵犯用戶隱私。

有兩種方法可以調(diào)起系統(tǒng)相機拍照獲取圖片,我們先講比較簡單的一種

1、直接獲取用戶拍照結(jié)果

val launcher = registerForActivityResult(ActivityResultContracts.TakePicturePreview()) {bitmap->
    bitmap ?: return@registerForActivityResult
    vm.process(bitmap)
}

launcher.launch("image/*")

這個在舊版本的API中就等于

startActivityForResult(Intent(MediaStore.ACTION_IMAGE_CAPTURE),CODE)

等到用戶完成拍照,返回我們的activity時,我們就可以得到一張經(jīng)過壓縮的bitmap。這個方法很簡單,它的缺點就是獲得的bitmap像素太低了,如果對圖片像素有要求的話需要使用第二種方法

2、用戶拍照之后指定相機將未壓縮的圖片存放到我們指定的目錄

var uri: Uri? = null

val launcher =
  registerForActivityResult(ActivityResultContracts.TakePicture()) {
      if(it){
          uri?.let { it1 -> vm.process(it1) }
      }
  }
  
val picture = File(externalCacheDir?.path, "picture")
picture.mkdirs()
uri = FileProvider.getUriForFile(
  this,
  "${BuildConfig.APPLICATION_ID}.fileprovider",
  File(picture, "cache")
)
launcher.launch(uri)

這里我逐行進(jìn)行解釋:

  • 首先,我們需要指定拍攝的照片要存到哪,所以我們先指定圖片的存放路徑為externalCacheDir.path/picture/cache 注意這張圖片在文件系統(tǒng)中的名字就叫做cache了(沒有文件后綴)。
  • 然后我們通過FileProvider構(gòu)建一個有授權(quán)的Uri給系統(tǒng)相機,相機程序拿到我們的臨時授權(quán),才有權(quán)限將文件存放到APP的私有目錄。
  • 系統(tǒng)相機拍照完成之后就會走到回調(diào),如果resultCode為RESULT_OK才說明用戶成功拍照并保存圖片了。這樣我們就能得到一張系統(tǒng)相機拍出來的原圖的Uri,這樣我們就可以用這張圖片去處理業(yè)務(wù)了。

注意:使用方法二需要用到FileProvider,所以我們還要在AndroidManifest里聲明

<provider
  android:name="androidx.core.content.FileProvider"
  android:authorities="${applicationId}.fileprovider"
  android:exported="false"
  android:grantUriPermissions="true">
  <meta-data
      android:name="android.support.FILE_PROVIDER_PATHS"
      android:resource="@xml/provider_paths" />
</provider>

@xml/provider_paths是我們授權(quán)訪問的文件路徑,這里我寫的是

<paths xmlns:android="http://schemas.android.com/apk/res/android">
  <external-path name="external_files" path="."/>
</paths>

關(guān)于這個"path.xml",其實還有一些可以補充說明的,后面有空會補上,這里我簡單說明一下:

因為我們創(chuàng)建臨時文件的時候,文件指定的目錄是externalCacheDir?.path,對應(yīng)的path就是external-cache-path,表示我們要臨時授權(quán)的目錄是externalCacheDir,如果文件目錄指定的是其他路徑,那path節(jié)點也需要改成代表對應(yīng)文件夾的節(jié)點,這樣其他應(yīng)用才能訪問到我們APP的私有目錄

到此這篇關(guān)于Android無需權(quán)限調(diào)起系統(tǒng)相機的文章就介紹到這了,更多相關(guān)Android無需權(quán)限調(diào)起系統(tǒng)相機內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android中獲取IMEI碼的方法

    Android中獲取IMEI碼的方法

    本篇文章是對在Android中獲取IMEI碼的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Jetpack Compose實現(xiàn)列表和動畫效果詳解

    Jetpack Compose實現(xiàn)列表和動畫效果詳解

    這篇文章主要為大家詳細(xì)講講Jetpack Compose實現(xiàn)列表和動畫效果的方法步驟,文中的代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-06-06
  • Android下拉刷新框架實現(xiàn)代碼實例

    Android下拉刷新框架實現(xiàn)代碼實例

    這篇文章主要介紹了Android下拉刷新框架實現(xiàn)代碼實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • web app與原生app的區(qū)別

    web app與原生app的區(qū)別

    本文主要給大家分析介紹了web app與原生app的區(qū)別,以及各自的優(yōu)勢和劣勢,推薦給大家,有需要的小伙伴來參考下吧
    2015-03-03
  • Android 自定義日期段選擇控件功能(開始時間-結(jié)束時間)

    Android 自定義日期段選擇控件功能(開始時間-結(jié)束時間)

    這篇文章主要介紹了Android 自定義日期段選擇控件功能,開始時間-結(jié)束時間。本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Flutter?EventBus事件總線的應(yīng)用詳解

    Flutter?EventBus事件總線的應(yīng)用詳解

    這篇文章主要為大家介紹了Flutter?EventBus事件總線的應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Android自定View流式布局根據(jù)文字?jǐn)?shù)量換行

    Android自定View流式布局根據(jù)文字?jǐn)?shù)量換行

    這篇文章主要為大家詳細(xì)介紹了Android自定View流式布局,根據(jù)文字?jǐn)?shù)量換行,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • android倒計時控件示例

    android倒計時控件示例

    這篇文章主要為大家詳細(xì)介紹了android倒計時控件示例,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android編程自定義扁平化對話框示例

    Android編程自定義扁平化對話框示例

    這篇文章主要介紹了Android編程自定義扁平化對話框,結(jié)合具體實例形式分析了Android自定義扁平化對話框的布局與功能相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • Android改變ExpandableListView的indicator圖標(biāo)實現(xiàn)方法

    Android改變ExpandableListView的indicator圖標(biāo)實現(xiàn)方法

    這篇文章主要介紹了Android改變ExpandableListView的indicator圖標(biāo)實現(xiàn)方法,結(jié)合實例形式分析了改變ExpandableListView的indicator圖標(biāo)相關(guān)步驟與實現(xiàn)技巧,涉及Android配置文件的修改,需要的朋友可以參考下
    2016-03-03

最新評論