Following Google Drive Quick Start (Android)
這其實就是Follow官網的Android Quickstart下去實作,畢竟前一陣子我耐不下心看官網教學我就一直做不出來…,寫成中文的應該相對簡單。
Step1. 獲得 SHA1 FingerPrint
使用keytool (keytool一般就在java_path/bin下面),找到他然後開cmd(terminal),在有keytool的目錄下輸入command
windows 要下:(ex: 我的電腦名稱是dell11,理論上你可以放在你想要的位置,我是乖乖照著官網想要的路徑擺放)
$keytool -exportcert -alias androiddebugkey -keystore "C:\Users\dell11\.android\debug.keystore" -list -v
Mac/Linux 要下:
$keytool -exportcert -alias androiddebugkey -keystore "~/.android/debug.keystore" -list -v
差別大概就是在斜線方向不同,還有作業系統file system的一些差異,輸入了之後他會叫你輸入password,此時輸入 android 便可,然後應該可以看到一串東西如下:
輸入金鑰儲存庫密碼: 別名名稱: androiddebugkey 建立日期: 2015/4/14 項目類型: PrivateKeyEntry 憑證鏈長度: 1 憑證 [1]: 擁有者: CN=Android Debug, O=Android, C=US 發出者: CN=Android Debug, O=Android, C=US 序號: 552bf95a 有效期自: Tue Apr 14 01:14:02 CST 2015 到: Thu Apr 06 01:14:02 CST 2045 憑證指紋: MD5: D8:C1:94:74:C7:0F:91:D8:EC:06:54:33:43:D3:EC:9F SHA1: 27:82:C6:F3:FB:9A:82:2D:A5:93:36:3B:31:A9:F5:98:4A:0D:33:2C SHA256: 95:A0:D3:69:DA:E6:37:BB:B0:66:9E:F2:D3:16:0D:8F:F4:E6:92:0D:B0:90:1D:A7:51:0C:87:7A:98:70:40:05 簽章演算法名稱: SHA1withRSA 版本: 3
把SHA1那行給記起來(D8:AA:43:97:59:EE:C5:95:26:6A:07:EE:1C:37:8E:F4:F0:C8:05:C8)。
Step2. 開啟Google API
然後到這裡,選擇建立 新專案 => 繼續 => 前往憑證 => 新增憑證 => 選擇OAuth2.0用戶端編號 => 你會發現不能選擇應用程式類型,因為Google說 您必須先在同意畫面中設定產品名稱,才能建立 OAuth 用戶端編號,所以先去設定產品名稱之後,就可以回來選擇應用程式類型, 這邊選擇Android:- 用戶端名稱 : 打什麼應該都可以。
- 簽署憑證的指紋 : 就填上剛剛keytool拿到的SHA1後面那一長串。
- 套件名稱 : 這個很重要,應用程式建構後要跟這個值對到才可以使用google drive api,例如你的應用程式是叫做 com.example.drivequickstart,這邊也要輸入com.example.drivequickstart. (為了實作方便,直接用這個吧,Android 提供的Source Code也是用這個) 然後選擇建立。
Step3. 建立一個新的Android 應用程式專案
打開Android Studio,開一個新專案(Company Domain : com.example.drivequickstart) ,然後把build.gradle(app)內容換成:
apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.example.drivequickstart" minSdkVersion 11 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.1' compile 'com.google.android.gms:play-services:7.3.0' compile 'com.google.api-client:google-api-client:1.20.0' compile 'com.google.api-client:google-api-client-android:1.20.0' compile 'com.google.api-client:google-api-client-gson:1.20.0' compile 'com.google.apis:google-api-services-drive:v2-rev170-1.20.0' }
然後在上方列點選 Android=> Sync Project with Gradle Files. 讓他把依賴的sdk加入project中,然後分別覆蓋下列幾個檔案,如果不存在就開新檔 :
- AndroidManifest.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
- MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 |
|
- ApiAsyncTask.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
|
然後就可以執行囉,這個app不能執行在虛擬機上,執行的Device必須要有Google Service,執行結果是把你的google drive的前十項名字列出來,這就是個很簡易的Android google drive 應用程式了,這個app就是很單純的去你的google drive拿到前20項檔案名稱然後寫在螢幕上。
如果要其功能完整,在Google Developer中都可以找到些方法,這邊提供上傳檔案的function.
上傳檔案要使用下面這function,出處還是 google developer…..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
再來實現MediaHttpUploaderProgressListener,就可以知道現在上傳的狀態,function如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
有了這個Listener之後要把他放到insertFile這個function中,我們改寫一下insertFile(),這邊說明一下insertFile要輸入的值,假設我們要上傳的檔案絕對路徑為 “/sdcard/Download/log.txt” :
- service :就是google drive quick start 中的mService
1 2 3 4 |
|
title :上傳之後的檔名,一般就是使用 “log.txt” (對應filename)
description :上傳之後的描述,不會影響什麼東西…
parentId :資料夾的名稱,如果是根目錄就填 null
mimeType :如果你title的extension給對應該就可以直接下null了.
filename :這邊應該要下檔案路徑,"/sdcard/Download/log.txt"
大致上就是這樣。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
Code中的setChunkSize反應出來就是他大概每次分多少bytes上傳,然後每次上傳一個Chunk,Listener就會被Call一次, 應該可以直接在Listener中用UI thread更新progress bar,目前的code只有先把他印出來而已。
我這邊也寫了一個簡單的upload到google drive的app GoogleDriveUpload,結合了Quick start然後再加上Upload按鍵,使用的人記得要把app的名稱改成你的才可以使用喔.
Google Drive api 的部分大致上就是這樣囉,有什麼問題都歡迎討論.