Всем привет, в очередной раз решил написать пост и долго не знал о чем написать, а потом залез на несколько форумов и увидел что у народа серьезные траблы с интентами в андроиде, люди не могут перейти с активности на активность или передать данные таким способом.
В интернете полно туториалов на эту тему, я не знаю в чем проблема и почему у некоторых не получается разобраться, но сегодня я постараюсь разъяснить элементарные вопросы по этому классу.
Для начала что такое Intent? Intent — это механизм для описания одной операции — выбрать фотографию, перейти с активности на активность, передать данные с одного окна на другое, отправить письмо, сделать звонок, запустить браузер (или какую либо другую программу) и перейти по указанному адресу.
Сегодня я по порядку расскажу как делается каждый из этих типов интентов, быстро и кратко.
Переход с одной активности на другу
Это самый простой и базовый способ, если вы запомните его то дальше будет просто. В любое место где вы хотите что бы запускался переход на вторую активность вставьте этот код и он будет переходить на нужную активность.
Допустим у нас есть два класса — FirstActivity и SecondActivity, нам с первой нада перейти на вторую, для этого на первой активности в лейауте создаем кнопку и вешаем на нее листенера в коде программы. Это выглядит примерно так:
Сперва делаем леяут с разметкой.
main.xml
< RelativeLayout xmlns:android = xmlns:tools = "http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" > < Button android:id = "@+id/button1" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Button" /> RelativeLayout >
FirstActivity.java
protected
void
onCreate
(Bundle
savedInstanceState
)
{
super
.
onCreate
(savedInstanceState
);
setContentView
(R
.
layout
.
activity_main
);
//присвоили кнопку к кнопке на леяуте
Button
btn
=
(Button
)
findViewById
(R
.
id
.
button1
);
//повесили на него листенера
btn
.
setOnClickListener
(new
OnClickListener
()
{
@Override
public
void
onClick
(View
v
)
{
//переходим с первой на вторую активность
Intent
intent
=
new
Intent
(FirstActivity
.
this
,
SecondActivity
.
class
);
startActivity
(intent
);
}
});
}
AndroidManifest.xml
<
application
android:allowBackup
=
"true"
android:icon
=
"@drawable/ic_launcher"
android:label
=
"@string/app_name"
android:theme
=
"@style/AppTheme"
>
<
activity
android:name
=
"com.example.intent.FirstActivity"
android:label
=
"@string/app_name"
>
<
intent-filter
>
<
action
android:name
=
"android.intent.action.MAIN"
/>
<
category
android:name
=
"android.intent.category.LAUNCHER"
/>
intent-filter
>
activity
>
<
activity
android:name
=
".SecondActivity"
>
activity
>
application
>
Ну вторая а вторая активность у нас пустая, после нажатия на кнопку вы просто перейдете на следующую активность. Для просмотра результата перехода создайте второй лейаут файл в котором добавьте текствью, и напишите что нибудь там. Самое главное что бы SecondActivity наследовался так же от Activity как и первый иначе вы увидите ошибку.
Передача данных между активностями
Передача данных между активностями очень популярная штука, и полезная, что бы не мучаться и не делать все это интентами конечно можно использовать преференсы, сохранять в них и считывать в нужной активности, но это годиться не для разовой передачи, а для записи данных на долгое хранение, так как после 1000 записи в префсы у вас программа начнет уже глючить так как кеш будет забит разного рода данными.Идея такого интента очень простая, для примера я просто передам с одной активности на другую какое нибудь слово. Пусть это слово будет «ты торт!». Смотрим как это делается.
Выглядеть программа будет так же как и в первом примере, у нас будет одна кнопка которая будет делать переход с активности на активность, только на этот раз еще и будет передавать слово, по этому менять в лейауте ничего не будем, а изменим сразу код в FirstActivity.
FirstActivity.java
// переходим с первой на вторую активность
Intent
intent
=
new
Intent
(FirstActivity
.
this
,
SecondActivity
.
class
);
//Передаем на следующую аквтиность слово в статическую переменную
intent
.
putExtra
(SecondActivity
.
TEXT
,
"Ты торт!"
);
startActivity
(intent
);
Вот в этом месте мы добавляем putExtra который передает все что ваша душа пожелает, он принимает класс с константой в которую записываем что передавать, и сам текст\символ\цифру которую мы хотим передать.
SecondActivity.java
// статическая перменная
public
static
final
String
TEXT
=
"Text"
;
@Override
protected
void
onCreate
(Bundle
savedInstanceState
)
{
super
.
onCreate
(savedInstanceState
);
setContentView
(R
.
layout
.
second
);
//объявляем текствью в который выведем текст
TextView
text
=
(TextView
)
findViewById
(R
.
id
.
textView1
);
//принимаем интент посланый из первой активности
Bundle
extras
=
getIntent
().
getExtras
();
//выводим что получили
text
.
setText
(extras
.
getString
(TEXT
));
}
Ну и теперь нам нужна разметка в которую будем рисовать текст:
second.xml
xml version
=
"1.0"
encoding
=
"utf-8"
?>
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
android:orientation
=
"vertical"
>
<
TextView
android:id
=
"@+id/textView1"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"TextView"
/>
LinearLayout
>
После перехода с первой активности на другую вы увидите в левом верхнем углу сообщение что вы торт.
Вызов программ через intent
Так же как я уже упоминал ранее при помощи этого класса можно открывать программы разного рода, разные браузеры которые установлены на телефоне\планшете или например приложения для социальных сетей или файловые менеджеры для нахождения файлов.Это очень удобная штука, я ее использовал в некоторых своих программах, в версиях андроида выше 3 работает отлично, а почему то в 3 версии андроида оно бычит, радует только то что телефонов на третьем андроиде очень мало (:
В общем смотрим на все том же самом примере класса FirstActivity. Сейчас мы откроем список браузеров.
В классе FirstActivity заменим наш старый интент на вот такой:
FirstActivity.java
// задаем адрес на который нада перейти
Uri
address
=
Uri
.
parse
("http://google.com"
);
// открываем список браузеров
Intent
intent
=
new
Intent
(Intent
.
ACTION_VIEW
,
address
);
// запускаем
startActivity
(intent
);
Тут у нас из комментариев понятно что происходит, но помимо константы ACTION_VIEW есть еще очень много других разных констант которые позволяют выполнять разные функций.
Открытие файлов и папок через intent
Например для открытия локального каталога внутри телефона вам нужно сделать вот такой интент:В FirstActivity заменим старый интент на этот.
FirstActivity.java
//создаем в шапке класса переменную которая будет сохранять id выбранного файла
private
static
final
int
FILE_SELECT_CODE
=
0
;
//а дальше в том же onClickListener"ре заменяем старый интент на этот // задаем константу для захвата данных Intent intent = new Intent (Intent . ACTION_GET_CONTENT ); //какую папку открываем intent . setType ("file/*" ); //запускаем всю красоту startActivityForResult (intent , FILE_SELECT_CODE );
FirstActivity.java
//Выше или ниже метода onCreate()
public
void
onActivityResult
(int
requestCode
,
int
resultCode
,
Intent
data
)
{
switch
(requestCode
)
{
case
FILE_SELECT_CODE
:
{
Uri
uri
=
data
.
getData
();
try
{
//тут передаем uri в тот метод в котором вы ходите вывести содержимое файла
}
catch
(IOException
e
)
{
e
.
printStackTrace
();
}
catch
(URISyntaxException
e
)
{
e
.
printStackTrace
();
}
}
break
;
}
super
.
onActivityResult
(requestCode
,
resultCode
,
data
);
}
Так же в андроиде есть куча других констант, их всех я описать не буду потому что их много, например вот несколько:
Сегодня мы рассмотрели только основные самые используемые виды intent"ов, спасибо за внимание.
Исходников не будет так как мне кажется что материал довольно простой.
На вкладке Панель запуска, открываемой с главного экрана, содержатся значки всех приложений, установленных на телефоне, включая приложения, загруженные и установленные из Android Маркета или других источников.
При открытии приложения другие используемые приложения не останавливаются - они продолжают выполняться: воспроизводится музыка, отображаются веб-страницы и т. д. Можно быстро переключаться между приложениями для работы с несколькими приложениями одновременно. Операционная система Android и работающие в ней приложения взаимодействуют, чтобы неиспользуемые приложения не задействовали ресурсы. При необходимости приложения останавливаются и снова запускаются. Поэтому нет причин останавливать приложения, если только вы не уверены, что загруженное приложение функционирует неверно. Подробные сведения об использовании приложениями памяти и о способах управления этими приложениями см. в разделе .
Сведения о поиске и установке дополнительных приложений для вашего телефона (включая инструменты измерения производительности, служебные программы, игры, справочные материалы и прочие виды программного обеспечения) см. в разделе .
Открытие и закрытие Панель запуска
Если открыто больше приложений, чем может разместиться на панели запуска, можно прокрутить панель вверх или вниз для просмотра всех приложений.
Можно добавить значок приложения на главный экран: для этого следует нажать и удержать значок на Панель запуска, пока не включится вибрация, а затем перетащить значок в нужное место на главном экране.
Панель запуска закрывается автоматически, если нажать значок для открытия приложения или переместить значок с панели Панель запуска на главный экран.
Открытие приложения
- Нажмите значок приложения на панели Панель запуска.
- Нажмите значок приложения на главном экране.
Переключение на недавно используемое приложение
Откроется небольшое окно, содержащее значки всех использованных в последнее время приложений.
- Нажмите значок для открытия связанного с ним приложения.
Или нажмите кнопку Назад для возвращения к текущему приложению.
Интерфейсы многозадачности и взаимодействие с ними всегда были одной из слабых сторон операционной системы Android, по крайней мере лично для меня. Либо ребята из Google просто не хотят сделать хорошее переключение между задачами и стараются идти «своим путем», либо просто хорошие интерфейсы защищены патентами. В любом случае операционная система Android и стала популярной потому, что интерфейс ее легко можно изменить. Например, недавнее позволяет облегчить работу с часто используемыми задачами. Читайте полный обзор под катом
.
До появления Pintasking у приложения уже было несколько аналогов, например и . Но все они в той или иной мере были несовершенны. Новая разработка от студии PhinxApps предлагает удобный способ переключения между «горячими» задачами и даже добавляет один интересный жест, который является аналогом ALT + Tab на компьютерах с Windows.
Как работает
Основная функция приложения Pintasking - это вывод дополнительных иконок приложений на боковую часть дисплея. Они отображаются поверх любого приложений, поэтому тапом на значки можно переключаться между соответствующими задачами или просто запускать программы. При этом иконки приложений можно оставлять на экране навсегда, но по-умолчанию они пропадают после ухода устройства в спящий режим. Добавить новую иконку можно через верхний бар, где всегда отображается уведомление от приложения Pintasking. Нужно просто тапнуть на него и текущее открытое приложение будет добавлено в боковой бар быстрого переключения задач.
Если вас раздражает постоянно висящее уведомление, то его можно убрать - достаточно отключить доступ Pintasking к нотификациям в менеджере приложений. Иконки в баре довольно умные, например: после того, как вы запустили браузер, его значок в баре пропадет и на его месте появится иконка переключения задачи, которая возвратит вас в предыдущее приложение.
Долгое нажатие на иконки позволяет быстро перейти в настройки Pintasking или удалить иконку из бара.
Жесты
Удобные свайп-жесты - одна из главных функций приложения Pintasking. Настройки программы предлагают активировать два жеста: свайп снизу вверх с кнопки «Домой» (замена вызова Google Now) и свайп с левой части панели бара уведомлений вниз. Лично я вообще не пользуюсь персональным помощником от Google, поэтому замена жеста с кнопки «Домой» далась мне легко. Жест переключает между текущей и предыдущей задачами, что довольно удобно. Мне как, пользователю смартфона BlackBerry, где жест снизу вверх является системным, понравились возможности Pintasking в этом плане.Жест переключения между задачами не очень быстрый, потому что он вызывает меню задач и автоматически переключается на нужное приложение, но все равно экономит один тап.
GIF-анимация по клику (много трафика!)
В Pintasking полно интересных настроек и скрытых возможностей. Например, на устройствах с есть возможность убрать задержку при переключении задач. Также можно настроить размер и положение иконок в боковом баре, включить или выключить жесты, увеличить или уменьшить скорость анимаций. И большинство этих возможностей доступны только в платной версии приложения. Создатели Pintasking максимально ограничили функционал бесплатного приложения. В нем пользователи могут закрепить только две иконки без настроек. Весь потенциал приложения раскрывается только в платной версии.
Приложение Pintasking определенно понравится тем, кто пользуется небольшим набором программ и часто переключается между ними. Пока в ванильном Android не появилось полноценной многооконности, Pintasking может быть полезным в повседневном использовании. Скачать приложение Pintasking для Android можно на Трешбоксе.
Я делаю приложение, которое должно быть в состоянии переключиться между приложениями, которые пользователь имеет открытый (например, приложения в многозадачном меню), я имею ComponentName 10 новых приложений, и могу начать их (т.е., переключиться на них) как это:
Intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(info); startActivity(intent);
Однако, когда я пытаюсь измениться на Facebook (И вероятно некоторые подобные приложения), он просит определенное разрешение:
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.facebook.katana/.activity.FbFragmentChromeActivity } from ProcessRecord{42310bc0 8578:com.javanut13.multitaskheads/u0a10095} (pid=8578, uid=10095) requires com.facebook.permission.prod.FB_APP_COMMUNICATION
Есть ли путь вокруг этого, на самом деле переключаясь на приложение, вместо того, чтобы начать его? Я могу просто послать центр в различное приложение?
01 ответы
Если у вас нет разрешения, я думаю, что можно только начать деятельность другого применения, когда ее "экспортируемый" признак установлен в истинный. Подобное Facebook приложение могло бы установить это в ложный и не предоставляет доступ другого приложения к его деятельности.
Я не проверил это один, но можно попробовать следующие коды:
Intent extApp= getPackageManager().getLaunchIntentForPackage(facebook-package-name); this.startActivity(extApp);
Надежда это помогает.
С выпуском Android Pie Гугл добавил множество новых функций и улучшений для пользователей. Android Pie теперь более умный, слегка изменился внешний вид Андроида, появился новый инструмент для создания скриншотов и есть возможность выключения экранных кнопок навигации.
С Android Pie пользователи имеют возможность использовать жесты для обычных задач, таких как открытие лотка приложений, переключение между приложениями и закрытие приложений. Прежде чем вы сможете использовать новую функцию, вам необходимо включить её, перейдя в меню "Настройки> Система> Жесты> Свайп вверх на кнопке "Домой". Сразу после включения функции,
вы заметите, что три кнопки внизу пропадут, они заменятся кнопкой в виде капсулы посередине и крошечной стрелкой "назад".
Жесты предполагают привыкание к ним, и они, конечно, не будут нравиться абсолютно всем, но если вы хотите попробовать их, давайте посмотрим, как они работают!
Домой или вернуться назад.
Вы можете вернуться домой с любого экрана одним нажатием на новую кнопку "Домой". Длительное нажатие откроет Ассистента Гугл. И, конечно же, кнопка "назад" действует так же, как и на любом Андроиде.Переключение приложений.
Просмотреть, какие приложения открыты можно так - короткий свайп от нижней части экрана. Вам нужно всего лишь слегка сдвинуть, чтобы жест сработал. Фактически, быстрый щелчок большим пальцем сработает лучше всего. В противном случае вы рискуете зайти слишком далеко и запустить приложение.Вы также найдете пять приложений в нижней части экрана, которые не соответствуют приложениям, которые у вас есть в Доке. Android Pie автоматически размещает здесь приложения на основе пользования телефоном.