關於Android 7 0相機遇到的一些問題

2021-08-02 18:20:03 字數 3169 閱讀 6639

android  7.0相機遇到的一些問題記錄,在網上看了好久,主要是之前沒有怎麼解除過,所以看起來挺費勁,沒有乙個

系統的介紹,所以看起來一臉懵逼,然後在書上查了一下,很簡單的搞定問題,沒有太多的原理詳解,以解決問題為核心,

現分享記錄,親測可用.

//啟動相機

intenti

=newintent

("android.media.action.image_capture");

i.putextra

(mediastore.

extra_output

,imageuri1);

i.addflags

(intent.

flag_grant_read_uri_permission);

i.addflags

(intent.

flag_grant_write_uri_permission);

startactivityforresult(i

,flag);

首先建立乙個file,並指定**的儲存路徑,getexternalcachedir()

獲取手機sd卡的應用相關聯目錄,為什麼要使

用應用相關聯目錄呢,因為在android 6.0 後,sd卡被定義在危險許可權中,訪問相機需要申請執行時許可權,獲取應用

相關聯目錄就可以跳過這一步,fileprovider是android的乙個特殊的內容提供器,它使用了和內容提供器類似的機制

來對資料進行保護,提高了安全性.

這個大家都明白的,但是在指定uri的時候要進行判斷是否是7.0相機,小於7.0版本相機的處理方式並沒有什麼變化;注意7.0相機的路徑,需要呼叫 fileprovider.geturiforfile();第乙個

引數是上下文,第二個引數是乙個任意的字串 + .fileprovider

(注意,這個在後面有用到),第三個引數是file物件,最後得到乙個路徑

,就是7.0相機**儲存的最終路徑,意圖呼叫相機就不贅述了.因為是startactivityforresult隱式意圖呼叫相機,

**拍攝完成會儲存在output.jsp,再呼叫(7.0相機這樣呼叫拿到相片,見操作(2))(2): bitmapfactory.decodestream(getcontentresolver()

.openinputstream(

imageuri1

));得到這張,

(3): 然後需要在清單檔案中進行註冊內容提供器,
<

providerandroid:name="android.support.v4.content.fileprovider"

android:authorities="net.xinyongfu.fileprovider"

android:exported="false"

android:granturipermissions="true"

>

<

meta-dataandroid:name="android.support.file_provider_paths"

android:resource="@xml/file_paths"

/>

provider>

provider內的相關屬性,authrities:屬性是你可以自定義的任意字串 .fileprovider ,但是必須和剛才fileprovider.

geturiforfile();裡面的第二個引數是完全一致的;name:是固定的,exported必須是false,

granturipermissions 必須是true,

meta-data 裡面的屬性name 屬性是固定的,resource裡面引用了乙個xml資源,現在這個資源是不存在的,下面開始
建立,右擊res目錄->new->directory,建立乙個xml目錄,右擊xml建立乙個file,下面是xml裡面的**示例
(4):<?xml version="1.0" encoding="utf-8"

?>

<

pathsxmlns:android=""

>

<

external-pathname="my_images" path=""

/>

paths>

name可以隨便寫,path= "",代表將整個sd卡目錄進行共享,
但是在android4.0系統之前,還是要在清單檔案中申明訪問sd卡的許可權
<

uses-permissionandroid:name="android.permission.write_external_storage"

/>

這樣**就寫完了,注意:四步操作,缺一不可,相關api方法呼叫都是實現這個功能的基礎.

vmware 虛擬機器遇到的一些問題

1.vmware異常關閉後導致虛擬機器無法開啟問題解決 如果是window物理機已經關機過的情況下 把虛擬機器目錄下的.lck結尾的刪掉即可。關機過,vmware原來的軟體程序已經沒有了。lck 檔案是vmware軟體的一種磁碟鎖檔案,由於虛擬磁碟 vmdk 本身有乙個磁碟保護機制,為了防止多台虛擬...

關於Android的一些設計

關於android的一些設計 2012年01月13日 讓我們一起面對吧。android多型號的裝置以及形狀的諸多因素,讓其設計感覺像是一場艱苦的戰鬥。其神秘的文件使得設計和生產在一開始就顯得很難。在網上找有關android設計的網路資源,你會發現很少有幫助的東西。如果這一切讓你感到沮喪 而且如果這是...

關於Android的一些設計

關於android的一些設計 2012年01月13日 讓我們一起面對吧。android多型號的裝置以及形狀的諸多因素,讓其設計感覺像是一場艱苦的戰鬥。其神秘的文件使得設計和生產在一開始就顯得很難。在網上找有關android設計的網路資源,你會發現很少有幫助的東西。如果這一切讓你感到沮喪 而且如果這是...