緣起:
Android 的書最近看到一半了,開心 ~~ 但在 Intent 的範例上遇到不少問題,被它搞了好久,卡了好幾天才成功 (不過最後一個卡關的地方超白痴的就是) ,記錄一下。
範例流程:
先講講書本上的教學。一開始要讓 App 能取得手機的外部儲存空間存取權限,這邊沒什麼問題,照著做就能成功了,只是有很多類別跟方法我都不認識。
再來要把我們的 mp3 跟 png 放到虛擬手機上,它在這邊是使用 adb 工具,使用後,就能像在 Linux 上用指令操作手機,用 mv 指令把你電腦上的音樂檔與圖片檔放到虛擬手機的儲存空間裡。不過我在這裡遇到 permission deny 的問題,所以就想說,換把程式放到我的實體手機上跑好了。
接著,我們要讓被請求幫忙的程式也能有權限存取我們的音樂跟圖片檔,必需要使用 Fileprovider 來提供檔案的路徑,我也不是很懂啦,反正就照做。
首先要在 res 資料夾下新增一個 paths 的資源檔。
PS:我前面說的最後一個卡關的地方,就是在這裡,<external-path> 不知為啥寫成 <external-file-path> .... ,然後沒注意到,程式就一直出錯。
然後在 AndroidManifest.xml 下,<application> 標籤內新增 Fileprovider。
問題:
我有把 song.mp3 跟 image.png 都放到我的手機記憶體上,不過程式在跑的時候,點 "開啟網頁" 的 button 沒什麼問題,可是點了 "播放MP3" 跟 "顯示圖片" 的 button 後,它無法成功,其它程式無法開啟音樂檔或圖片檔。
一直看不出是哪出了問題,後來想到,有沒有可能是因為檔案不存在哪 ? 我記得 File 類別可以用 exists 來確定檔案是否存在,可以把結果放在一個 TextView 上看看。所以,我 MP3 的 button 事件就先改成下面這樣來測試。
Android 的外部儲存:
我的手機有插 SD 卡,所以用 usb 線連到電腦後,會看到兩個空間,我想說,外部儲存空間指的就是 SD 卡吧,所以就把資料都放在 SD 卡的目錄下。
可是 app 找不到東西ㄟ ,還是我把路徑也印出來看看 ? 看看那個 Environment.getExternalStorageDirectory.getPath() 得到的值是什麼。
嗯....,是 /storage/emulated/0 的位置,我還是不太明白是在哪 XD ,不過,把這東西丟到 google 上找後,到是看到這篇文章。
哦~~~ 所以,那一個 /storage/emulated/0 指的就是那個 "內部共用儲存空間",雖然它是手機本身就有的空間,但 android 還是會把它給看成外部的儲存空間。
沒有留言:
張貼留言