91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android無需權限調用系統相機拍照怎么實現

發布時間:2023-03-21 14:57:44 來源:億速云 閱讀:225 作者:iii 欄目:開發技術

這篇“Android無需權限調用系統相機拍照怎么實現”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android無需權限調用系統相機拍照怎么實現”文章吧。

正文

在進行一些小型APP的開發,或者是對拍照界面沒有自定義要求時,我們可以用調起系統相機的方式快速完成拍照需求

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

有兩種方法可以調起系統相機拍照獲取圖片,我們先講比較簡單的一種

1、直接獲取用戶拍照結果

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

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

startActivityForResult(Intent(MediaStore.ACTION_IMAGE_CAPTURE),CODE)

等到用戶完成拍照,返回我們的activity時,我們就可以得到一張經過壓縮的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)

這里我逐行進行解釋:

  • 首先,我們需要指定拍攝的照片要存到哪,所以我們先指定圖片的存放路徑為externalCacheDir.path/picture/cache 注意這張圖片在文件系統中的名字就叫做cache了(沒有文件后綴)。

  • 然后我們通過FileProvider構建一個有授權的Uri給系統相機,相機程序拿到我們的臨時授權,才有權限將文件存放到APP的私有目錄。

  • 系統相機拍照完成之后就會走到回調,如果resultCode為RESULT_OK才說明用戶成功拍照并保存圖片了。這樣我們就能得到一張系統相機拍出來的原圖的Uri,這樣我們就可以用這張圖片去處理業務了。

注意:使用方法二需要用到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是我們授權訪問的文件路徑,這里我寫的是

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

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

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

以上就是關于“Android無需權限調用系統相機拍照怎么實現”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绩溪县| 临江市| 泽普县| 九寨沟县| 泉州市| 万安县| 彭州市| 双牌县| 九龙城区| 苍南县| 西贡区| 广宗县| 太保市| 大渡口区| 合山市| 通化县| 万盛区| 宽甸| 遂溪县| 基隆市| 铁岭市| 渑池县| 大荔县| 天台县| 东乌珠穆沁旗| 驻马店市| 工布江达县| 红河县| 买车| 汝阳县| 牡丹江市| 从化市| 南宁市| 濮阳市| 沙洋县| 余干县| 治多县| 大新县| 武鸣县| 岳普湖县| 鄯善县|