Помогите с намерением начать на Android - PullRequest
0 голосов
/ 15 ноября 2010

Я пытаюсь узнать кое-что из http://code.google.com/p/iosched/source/checkout. Я хотел бы посмотреть, как они реализовали те шаблоны пользовательского интерфейса, о которых они говорили в I / O.

В HomeActivity они используют этот код для запуска NotesActivity :

/* Launch list of notes user has taken*/
public void onNotesClick(View v) {  
    startActivity(new Intent(Intent.ACTION_VIEW, Notes.CONTENT_URI));
}

Класс Notes находится в классе ScheduleContract и выглядит следующим образом:

public static class Notes implements NotesColumns, BaseColumns {
    public static final Uri CONTENT_URI =
            BASE_CONTENT_URI.buildUpon().appendPath(PATH_NOTES).build();
    public static final Uri CONTENT_EXPORT_URI =
            CONTENT_URI.buildUpon().appendPath(PATH_EXPORT).build();

    /** {@link Sessions#SESSION_ID} that this note references. */
    public static final String SESSION_ID = "session_id";

    /** Default "ORDER BY" clause. */
    public static final String DEFAULT_SORT = NotesColumns.NOTE_TIME + " DESC";

    public static final String CONTENT_TYPE =
            "vnd.android.cursor.dir/vnd.iosched.note";
    public static final String CONTENT_ITEM_TYPE =
            "vnd.android.cursor.item/vnd.iosched.note";

    public static Uri buildNoteUri(long noteId) {
        return ContentUris.withAppendedId(CONTENT_URI, noteId);
    }

    public static long getNoteId(Uri uri) {
        return ContentUris.parseId(uri);
    }
}

Я не вижу, что именно делает этот код, и как он заканчивается запуском NotesActivity с загруженными заметками. Я также не понимаю, как и для чего используется URI в качестве второго параметра в новом:
Намерение (Intent.ACTION_VIEW, Notes.CONTENT_URI).
Я искал объяснения в Google, но не смог найти простых и простых примеров. Я бы предположил, что класс Notes используется для указания и форматирования данных (заметок), а затем каким-то образом запускается NotesActivity , но не понимаю, как именно.

1 Ответ

0 голосов
/ 15 ноября 2010

В Android вы никогда не запускаете определенное приложение, по крайней мере, не напрямую.То, что вы делаете, это то, что вы создаете Intent, то есть an abstract description of an operation to be performed:

Intent предоставляет средство для выполнения позднего связывания во время выполнения между кодом в различных приложениях,Его наиболее важное применение - запуск мероприятий, где его можно рассматривать как связующее звено между действиями.По сути, это пассивная структура данных, содержащая абстрактное описание выполняемого действия.Основными частями информации в намерении являются:

  • действие - общее действие, которое должно быть выполнено, например ACTION_VIEW , ACTION_EDIT , ACTION_MAIN и т. Д.

  • data - Данные, с которыми нужно работать, например, запись человека вбаза контактов, выраженная в виде Uri .

Когда вы хотите запустить другое приложение, отправьте текстовое сообщение, выберите контакт, активируйте камеру и т. д.вы просто создаете и запускаете Intent, а затем Android сам определяет, какое приложение оно должно запустить.

Итак, для вашего примера с операцией Notes:

startActivity(new Intent(Intent.ACTION_VIEW, Notes.CONTENT_URI));

Первоепараметр Intent.ACTION_VIEW говорит о том, что этот Intet отобразит что-то для пользователя.Второй параметр, Notes.CONTENT_URI, является универсальным идентификатором ресурса для действия Notes (в вашем примере URI также может включать идентификатор, если вы хотите открыть действие с определенной заметкой).В результате для пользователя отображается активность Notes.

Если вам нужна дополнительная информация, я предлагаю прочитать о Основах приложений Android и Фильтры Intent и Intent ,которые подробно объясняют эти понятия

...