ДОЗВІЛ ІНШИМ ДОДАТКАМ ЗАПУСКАТИ ВАШУ ACTIVITYПопередні два уроки були зосереджені на одній стороні історії: запуск activity іншого додатку з вашого додатку. Але, якщо ваш додаток може виконувати корисні дії в іншому додатку, то він також має бути готовим відповісти на запити дії з інших додатків. Наприклад, якщо будуєте соціальний додаток, який може ділитися повідомленнями або фотографіями з друзями-користувачами, то у ваших інтересах підтримати намір ACTION_SEND, щоб користувачі могли ініціювати дію "share" з іншого додатку і запустити ваш додаток для виконання дії. ДОДАВАННЯ ФІЛЬТРА INTENTДля того, щоб правильно визначити, які наміри ваша activity може обробляти, кожен доданий вами фільтр наміру повинен бути якомога більш конкретним з точки зору типу дій і даних, які приймає activity. Action (Дія) Рядок з ім'ям дії, яка виконується. Зазвичай, одне зі значень платформи визначається як ACTION_SEND або ACTION_VIEW. Data (Дані) Опис даних, пов'язаних з наміром. Category (Категорія) Забезпечує додатковий спосіб охарактеризувати обробку наміру activity, як правило, пов'язану з жестом користувача або місцем, з якого він стартував. Є кілька різних категорій, підтримуваних системою, але більшість з них використовується не часто. Тим не менше, всі неявні наміри визначаються з CATEGORY_DEFAULT за замовчуванням. У своєму фільтрі наміру можете оголосити, які критерії ваша activity приймає, оголосивши кожен з них з відповідними XML-елементів, вкладених в елемент <intent-filter> <activity android:name="ShareActivity"> Кожний вхідний намір визначає тільки одну дію і один тип даних, але це нормально, щоб оголосити кілька примірників елементів <action>, <category> і <data> в кожному <intent-filter>. <activity android:name="ShareActivity"> Примітка: Для того, щоб отримати неявні наміри, ви повинні включити категорію CATEGORY_DEFAULT у фільтр наміру. Методи startActivity() і startActivityForResult() розглядають всі наміри так, як ніби вони оголосили категорію CATEGORY_DEFAULT. Якщо ви не оголошували її у фільтрі наміру, то неявні наміри не запустять вашу activity. ПОВЕДІНКА INTENT У ВАШІЙ ACTIVITYДля того, щоб вирішити, які дії слід прийняти у вашій activity, ви можете прочитати Intent, який був використаний для запуску activity. @Override ПОВЕРНЕННЯ РЕЗУЛЬТАТУЯкщо хочете повернути результат до activity, яка викликала вашу activity, просто викликайте setResult(), щоб вказати код результату та Intent результату. Коли операція виконається, то користувач повинен повернутися до первісної activity і викликати finish(), щоб закрити (і знищити) свою activity. Наприклад: // Створимо намір надати якісь дані результату Ви повинні з результатом завжди вказувати код результату. Як правило, це або RESULT_OK або RESULT_CANCELED. Ви можете надати додаткові дані з Intent, у разі потреби. Примітка: Результат встановлений в RESULT_CANCELED за замовчуванням. Таким чином, якщо користувач натискає кнопку Back (Назад) до завершення дії і перш, ніж встановився результат, то первинна activity отримує "canceled" ("скасований") результат. Якщо просто потрібно повернути ціле число, яке вказує один з декількох варіантів результату, то можете встановити будь-яке значення коду результату вище, ніж 0. Якщо використовуєте код результату, щоб доставити ціле і у вас немає необхідності включати Intent, то можна викликати setResult() і передати тільки код результату. Наприклад: setResult(RESULT_COLOR_RED); У цьому випадку можлива тільки жменька результатів, бо код результату локально визначається числом (більшим, ніж 0). Це добре працює, коли повертаєте результат в activity власного додатку, тому що activity, яка отримує результат, може посилатися на публічну константу, щоб визначити значення коду результату. Примітка: Немає необхідності перевіряти, стартувала ваша activity зі startActivity() чи з startActivityForResult(). Просто викликайте setResult(), якщо намір, що запустив вашу activity, може очікувати результат. Якщо первинна activity була викликана зі startActivityForResult(), то система передає їй результат, який забезпечуєте setResult(); в іншому випадку, результат ігнорується. (Джерело: developer.android.com) |