본문 바로가기

Dropbox.com/Dropbox upload, Android

Dropbox Android SDK test

Dropbox.com에서 제공하는 Android SDK를 이용하여 클라이언트 프로그램을 작성하고 인증/업로드/다운로드하는 예

Dropbox Android SDK Download

from : https://github.com/nsheridan/Dropbox-Android-Example

Dropbox Android SDK를 다운로드하고 Eclipse 프로젝트의 Build Path에 라이브러리를 등록하고, 또한 프로젝트 안의 libs 노드 위에서 마우스 우측을 클릭하여 import 를 선택하고 라이브러리 파일을 추가해준다.

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.dropboxdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".Main" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <data android:scheme="db-Your-App-key-here" /> </intent-filter> </activity> <activity android:name="com.dropbox.client2.android.AuthActivity" android:configChanges="orientation|keyboard" android:launchMode="singleTask" > <intent-filter> <data android:scheme="db-Your-App-key-here" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>



main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Link" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Upload" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Download" /> </LinearLayout>



Main.java

package com.example.dropboxdemo; import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.preference.PreferenceManager; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import com.dropbox.client2.DropboxAPI; import com.dropbox.client2.android.AndroidAuthSession; import com.dropbox.client2.exception.DropboxException; import com.dropbox.client2.session.AccessTokenPair; import com.dropbox.client2.session.AppKeyPair; import com.dropbox.client2.session.Session.AccessType; public class Main extends Activity { private DropboxAPI<AndroidAuthSession> mDBApi; final static String APP_KEY = "Your-App-key-Here"; final static String APP_SECRET = "Your-App-Secret-Here"; final static AccessType ACCESS_TYPE = AccessType.APP_FOLDER; SharedPreferences prefs; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); prefs = PreferenceManager.getDefaultSharedPreferences(this); String dropbox_key = prefs.getString("dropbox_key", ""); String dropbox_secret = prefs.getString("dropbox_secret", "");

/* Access Key/secret 가 설정항목에 저장되어 있으면 사용하여 DropboxAPI인스턴스를 생성한다 */ if (dropbox_key.length() > 0 && dropbox_secret.length() > 0) { AccessTokenPair access = new AccessTokenPair(dropbox_key, dropbox_secret); AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); AndroidAuthSession session = new AndroidAuthSession(appKeys, ACCESS_TYPE); session.setAccessTokenPair(access); mDBApi = new DropboxAPI<AndroidAuthSession>(session); } Button link = (Button) findViewById(R.id.button1); Button upload = (Button) findViewById(R.id.button2); Button download = (Button) findViewById(R.id.button3); /* 웹브라우저가 실행되고 dropbox.com사이트에 로그인 절차를 성공적으로 수행해야 함. 이미 인증을 거치고 성공 * 적으로 Access key/secret를 알고 있는 경우라면 아래의 링크과정은 수행할 필요가 없음 */ link.setOnClickListener(new OnClickListener() { public void onClick(View v) { AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); AndroidAuthSession session = new AndroidAuthSession(appKeys, ACCESS_TYPE); if (mDBApi == null) { mDBApi = new DropboxAPI<AndroidAuthSession>(session); } mDBApi.getSession().startAuthentication(Main.this); } }); upload.setOnClickListener(new OnClickListener() { public void onClick(View v) { File dir = new File(getFilesDir().getAbsolutePath()); try { PrintWriter out = new PrintWriter(new FileWriter(dir + "/test.txt")); for (int i = 0; i < 20; i++) { out.println("omg"); } out.close(); File file = new File(getFilesDir().getAbsolutePath(), "/test.txt"); FileInputStream in = new FileInputStream(file); mDBApi.putFileOverwrite("/test.txt", in, file.length(), null); } catch (IOException e) { e.printStackTrace(); } catch (DropboxException e) { e.printStackTrace(); } } }); download.setOnClickListener(new OnClickListener() { public void onClick(View v) { try { File output = new File("/mnt/sdcard/test.txt"); OutputStream out = new FileOutputStream(output); mDBApi.getFile("/test.txt", null, out, null); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (DropboxException e) { e.printStackTrace(); } } }); } /** 인증을 통과하면 Access key/secret가 주어지므로 차후에 재사용하기 위해 설정사항에 저장해둔다 */ @Override protected void onResume() { super.onResume(); if (mDBApi != null && mDBApi.getSession().authenticationSuccessful()) { try { mDBApi.getSession().finishAuthentication(); AccessTokenPair tokens = mDBApi.getSession().getAccessTokenPair(); Editor editor = prefs.edit(); editor.putString("dropbox_key", tokens.key); editor.putString("dropbox_secret", tokens.secret); editor.commit(); } catch (IllegalStateException e) { Log.i("DbAuthLog", "Error authenticating", e); } } } }