<< 前 ホーム 次 >>

bakaid: 20130602

Android APIには、FileChooserのようなファイルを選択
するためのダイアログがありません。

自分でファイルダイアログを作るというのも1つの
やり方です。

https://github.com/tkojitu/WagtailED

それよりも、Intentを使って外部のファイルマネージャ
を使うほうがいいでしょう。

アプリからのIntentに反応してくれるファイルマネージャ
の1つにOI File Managerがあります。

http://www.openintents.org/en/node/159

このファイルマネージャは、OpenIntentsという活動の
中のアプリの1つです。OpenIntentsを簡単に説明すると、
Android非標準だけど便利なIntentsは公開してみんなで
共用しようという活動です。

OI File Managerを呼び出すには、前回同様Intentを
使います。Intentに収める情報は:

* アクション名("org.openintents.action.PICK_FILE")
* ファイルマネージャを開く場所

などです。

前回はIntentで呼び出した結果は捨てましたが、今回は
選択結果を受け取るためにリザルトコードをつけます:

    private void onOpen() {
        String home = FileControl.getHomePath();
        Intent intent = new Intent(OI_ACTION_PICK_FILE);
        intent.setData(Uri.parse("file://" + home));
        intent.putExtra(OI_EXTRA_TITLE, getString(R.string.oi_open_title));
        intent.putExtra(OI_EXTRA_BUTTON_TEXT, getString(R.string.oi_open_button));
        try {
            startActivityForResult(intent, REQUEST_OI_ACTION_PICK_FILE);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(this, R.string.oi_no_filemanager_installed, Toast.LENGTH_SHORT).show();
        }
    }

ファイルマネージャで選択されたファイルは
onActivityResultで受け取ります。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK || data == null) {
            return;
        }
        switch (requestCode) {
        case REQUEST_OI_ACTION_PICK_FILE:
            onOiActionPickFile(data);
            break;
        case REQUEST_OI_ACTION_PICK_DIRECTORY:
            onOiActionPickDirectory(data);
            break;
        }
    }

このonActivityResultの引数のIntentにファイル
マネージャで選ばれたファイルのパスが入っています。

では、ファイルを保存するときはどうするかというと、
同じように外部ファイルマネージャを使うとすると、
ディレクトリを指定してもらうくらいしかアイデアは
浮かびませんでした。

https://github.com/tkojitu/WagtailET/blob/master/src/org/jitu/wagtail/et/WagtailET.java

本家Permlink

<< 前 ホーム 次 >>


Copyright © 1905 tko at jitu.org

バカが征く on Rails