DropboxAPIを使ってファイル一覧を表示

DropboxAPIの使い方を知るためにファイル一覧を表示できるものを作ってみた

ダウンロード

以下のURLからSDKはダウンロードできる。

API keyの発行

以下のURLにアクセスしてAPI keyをとる

Android Manifestを修正

InternetにアクセスするPermissionが必要だから追加

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

ついで、認証用のdropboxのActivityを設定。db-hogehogeのhogehoge部分をAPI Keyに変更する。db-は必要な文字列みたいだから消しちゃダメ。

    <activity
      android:name="com.dropbox.client2.android.AuthActivity"
      android:launchMode="singleTask"
      android:configChanges="orientation|keyboard">
      <intent-filter>
        <!-- Change this to be db- followed by your app key -->
        <data android:scheme="db-ここをAPIキーに変更" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE"/>
        <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
    </activity>

認証

以下のコードで認証。KEYとAccessTypeはApplicationを登録した際の設定に変更する。ActivityNameって書いてる部分は省略してthisのみとかで書くとエラーに成ったんで注意が必要。

	final static private String APP_KEY = "api-key";
	final static private String APP_SECRET = "api-secret";
	final static private AccessType ACCESS_TYPE = AccessType.DROPBOX;

	AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET);
	AndroidAuthSession session = new AndroidAuthSession(appKeys, ACCESS_TYPE);
	DropboxAPI<AndroidAuthSession> mDBApi = new DropboxAPI<AndroidAuthSession>(session);
	mDBApi.getSession().startAuthentication(ActivityName.this);

ファイル一覧を取得

DropboxAPIのmetadataでフォルダ情報を取ってきて、contents内にそのフォルダ配下のファイル情報があるからそれを取ってきてるだけ。

	List<Entry> entryList = new ArrayList<Entry>();
	try {
		Entry rootEntry = mDBApi.metadata(path, 10, null, true, null);
		List<Entry> entries = rootEntry.contents;
		for (final Entry entry : entries) {
			entryList.add(entry);
		}
	} catch (DropboxException e) {
		e.printStackTrace();
	}

Entryを表示

こんぐらいあれば表示できるようになるはず。entry.pathをmDBApi.metadata()に食わせてやればフォルダを掘っていくことができるようになる。

	for (Entry entry : entryList) {
		Log.d(TAG, entry.path); // ファイルパス
		Log.d(TAG, entry.fileName()); // ファイル名
		Log.d(TAG, String.valueOf(entry.isDir)); // エントリーがフォルダか?
	}

毎回認証が走るのがだるい

これは非常にだるいからTokenを保存して使う方法もある。

	// こんな感じで保存して
	SharedPreferences sp = getSharedPreferences('dropbox', MODE_PRIVATE);
	Editor edit = sp.edit();
	edit.putString('token', tokens.key);
	edit.putString('tokenSecret', tokens.secret);
	edit.commit();

	// こんな感じで使う
	SharedPreferences sp = getSharedPreferences('dropbox', MODE_PRIVATE);
	String accessToken = sp.getString('token', "");
	String accessTokenSecret = sp.getString('tokenSecret', "");
	AccessTokenPair tokens = new AccessTokenPair(accessToken, accessTokenSecret);
	mDBApi.getSession().setAccessTokenPair(tokens);

	// んで、認証判定して未認証なら認証開始みたいなね
	if (!mDBApi.getSession().authenticationSuccessful()) {
		mDBApi.getSession().startAuthentication(MainActivity.this);
	}

まとめ

携帯端末だと容量が少ないとかいうけど、SD使ったりすると別段そこまで気にならない。僕がDropboxを使うのは一つを修正すれば全てが変わるってところがいいんだと思う。パソコンでいじくっているものを携帯端末でちょっとだけ見れるとかそういう部分を作る際に気軽に使えるDropboxはいいよね。大体わかったからなんか作ろうかと思ってたらSyncAPIってのが出たっていうね。こっちのが便利そうだからこっちも調べてブログに書いてみようかと思う。