發表文章

目前顯示的是 5月, 2014的文章

SMILE

用你的微笑改變世界,別讓世界改變你的微笑。 Use your smile to change the world; don't let the world change your smile.                          -穿著Prada的惡魔 (The Devil Wears Prada), 2006

...

願死者安息,傷者早日康復。天佑台灣。

俗話說得好,這世上唯一不變的就是一直在變。 但請記住一件事,不要變成當初你討厭的那種人!

[Android] 透過FileProvider分享檔案

今天要來介紹如何"安全地"分享檔案。 首先要提到的是application sandbox: Android使用Linux user-based protection的方法來保護/隔離每一個application (UID)的目錄/檔案/程序等等。所以基於安全考量,基本上Google也都會建議所有的檔案/資料,請放到application自己的資料夾下(/data/data/[PACKAGE_NAME]/files)。這個資料夾只有該application (UID)讀得到。因為如果你放在external storage (ex: SD卡),那是所有人可讀/可寫的到的地方,不儘導致機敏資料洩漏,也有被人竄改的風險。 但這也衍生出一個問題。直接舉個例子來說:假設有一個相機軟體,主張可以保護你的個人隱私,所以把你照的照片都放在只有這個相機軟體才讀得到的地方。但你有天想要利用LINE分享給朋友,你該怎麼辦? 其實Android有提供一個叫FileProvider的東西,可以讓你使用content://Uri並安全地分享檔案。那你會問,前一段才講說被保護住了,別人無法讀取,那他如何解決權限的問題。關鍵點就在於FileProvider使用content URI。Content URI允許你"暫時"授於讀或寫的權限給你指定的application。你當然也可以說,那我把要分享的檔案放到SD卡或把檔案權限開成o+rw也可以,當然,不過這樣也門戶大開,所有人都可以來讀你的資料了。 以下就讓我們一步一步來看要如何使用FileProvider來分享檔案: 1. 指定你想分享的檔案位置: 在res/下新增一個xml/files_path.xml,並指定你想透過FileProvider分享的檔案位置和名稱。如下: <paths xmlns:android="http://schemas.android.com/apk/res/android">     <!-- 後面的path="images/",實際上會對應到 -->     <!-- /data/data/com.example.app/files/images/ -->     <!