IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> Написание программы для изучения ин. языка Урок 3
agentru
сообщение 2.4.2010, 15:27
Сообщение #1


Администратор
***

Группа: Главные администраторы
Сообщений: 63
Регистрация: 24.10.2008
Из: Донецк
Пользователь №: 1



Поскольку данные для отображения у нас будут храниться в файлах, неплохо иметь механизм просмотра файлов и каталогов на устройстве. Немного поискав стандартных компонент для просмотра файловой системы, наподобие JFileChooser в Java, обнаружил, что ничего подобного Android не предлагает, зато на официальном форуме Google, посоветовали использовать для этих целей наработки сайта www.openintents.org. Я сначала расстроился, но в итоге обнаружил, что использовать возможности просмотра структуры каталогов придется через использование Intent. Для меня до сего времени понятие «интента» оставалось загадкой, но в итоге – это оказался вполне удобный механизм.

Итак приступим к доработке нашей программы, добавим возможность просмотра файловой системы. Последняя актуальная информация по необходимому нам интенту находится по адресу: http://www.openintents.org/en/node/159 Здесь же можно скачать само приложение FileManager для установки на устройстве, без предварительной установки ничего работать не будет, ведь, по сути, наша программа при необходимости выбрать файл занятий, вызовет программу FileManager и получит от нее имя выбранного файла.

Первым делом создадим класс FileManagerIntents
public final class FileManagerIntents {
        public static final String ACTION_PICK_FILE =
        "org.openintents.action.PICK_FILE";
        public static final String ACTION_PICK_DIRECTORY =
        "org.openintents.action.PICK_DIRECTORY";
        public static final String EXTRA_TITLE =
        "org.openintents.extra.TITLE";
        public static final String EXTRA_BUTTON_TEXT =
        "org.openintents.extra.BUTTON_TEXT";
}

Где создадим константы, для передачи в Intent информации о том, что собственно мы от него хотим, например константа org.openintents.action.PICK_FILE сообщит о том что мы будем использовать режим выбора файлов, а передача параметра org.openintents.extra.BUTTON_TEXT сообщает FileManager о том что мы хотим написать на кнопке выбора файла. Теперь мы готовы вызывать внешнюю программу, для чего добавим в наше меню один пункт и повесим на него обработчик события выбора пункта меню. В menu.xml добавим:
<item android:id="@+id/open"
              android:orderInCategory="3"
              android:title="Open"/>

Изменим в MainActivity метод onOptionsItemSelected:
public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.exit:
                showAlert("Pressed Exit");
                return true;
            case R.id.n_ico:
                showAlert("Pressed Icon");
                return true;
            case R.id.open:
                openFile();
                return true;
        }
        return false;
    }

Здесь мы добавили проверку нажатия нашего пункта меню R.id.open как видно из кода, при нажатии вызывается метод openFile(), в котором мы проведем все необходимые действия:
 private void openFile() {
                String fileName = "*.csv";
                Intent intent = new Intent(FileManagerIntents.ACTION_PICK_FILE);

                intent.setData(Uri.parse("file://" + fileName));

                intent.putExtra(FileManagerIntents.EXTRA_TITLE, getString(R.string.open_title));
                intent.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT, getString(R.string.open_button));

                try {
                        startActivityForResult(intent, REQUEST_CODE_PICK_FILE_OR_DIRECTORY);
                } catch (ActivityNotFoundException e) {
                        Toast.makeText(this, R.string.no_filemanager_installed,
                                        Toast.LENGTH_SHORT).show();
                }
        }

В строковой переменной filename мы сможем передавать начальное имя файла, на котором откроется наш FileManager, сейчас пока, оно не играет особой роли. Далее создадим экземпляр класса Intent, куда передадим информацию о том какой собственно интент мы хотим вызвать. Через метод putExtra передадим параметры с которыми вызовем наш интент, по сути зададим надписи заголовка и на кнопке выбора файла. Если Android не обнаружит требуемого нам интента, то сработает исключение ActivityNotFoundException, где мы его обработаем, выведя соответствующее сообщение на экран устройства:
Toast.makeText(this, R.string.no_filemanager_installed,
Toast.LENGTH_SHORT).show();
Вызвав метод startActivityForResult мы запускаем Intent на выполнение. Осталось упомянуть пожалуй только еще об одном моменте, когда мы выбрали файл и закрыли FileManager наше приложение получит сообщение о том, какой файл был выбран, чтобы обработать это сообщение, достаточно переопределить метод onActivityResult:
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);

                switch (requestCode) {
                case REQUEST_CODE_PICK_FILE_OR_DIRECTORY:
                        if (resultCode == RESULT_OK && data != null) {
                                String filename = data.getDataString();
                                if (filename != null) {
                                        if (filename.startsWith("file://")) {
                                                filename = filename.substring(7);
                                        }
                                        showAlert(filename);
                                }
                        }
                        break;
                }
        }

REQUEST_CODE_PICK_FILE_OR_DIRECTORY – константа, по которой мы определили, что значение возвратил именно наш интент, ранее мы передавали ее в метод startActivityForResult. Получив значение выбранного файла, мы выведем его в виде сообщения передав в метод showAlert.

Приложение FileManager вызываемое из нашей программы будет выглядеть примерно так:
Прикрепленный файл  1.jpg ( 34.33 килобайт ) Кол-во скачиваний: 35


Исходники: Прикрепленный файл  frankoreader.zip ( 501.11 килобайт ) Кол-во скачиваний: 10

Go to the top of the page
 
+Quote Post

Fast ReplyReply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 10.9.2010, 0:02