JavaRush /Курсы /Курс "Программирование под Андроид" /Упражняемся в использовании интентов

Упражняемся в использовании интентов

Курс "Программирование под Андроид"
10 уровень, 3 лекция
Открыта

Справочник распространённых интентов

Для тех, кто использует эмулятор: Эта часть курса — одна из тех немногих, которые на эмуляторе не работают, так что переходите к ответам и следующим заданиям. Вернитесь к этому уроку, когда у Вас появится реальное Андроид-устройство для разработки.

Комментарии (24)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Эшли Уровень 10
24 апреля 2022
Чёрт, лучше бы они на примере ACTION_SEND объяснили эти интенты. Или на примере смены активностей. Это было непросто, но я справился. Значит и у тебя получится!)
maximk0 Уровень 6
26 января 2022
Тоже не меньше часа это задание заняло) Была проблема в том, что либо код вставлял емейл отправителю, либо вставлял заголовок письма и его текст, а вот все вместе не хотело работать. В итоге проблема была решена данным способом:

 Intent emailSelectorIntent = new Intent(Intent.ACTION_SENDTO);
        emailSelectorIntent.setData(Uri.parse("mailto:"));

        Intent emailIntent = new Intent(Intent.ACTION_SEND);
        emailIntent.putExtra(Intent.EXTRA_EMAIL, email);
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
        emailIntent.putExtra(Intent.EXTRA_TEXT, body);
        emailIntent.setSelector( emailSelectorIntent );
        startActivity(emailIntent);
Спасибо этому человеку, задавшему вопрос и самому нашедшему ответ на него.
Hokkaido Уровень 2
17 мая 2024

        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"cafe_in_jonny@gmail.com"});
        intent.putExtra(Intent.EXTRA_SUBJECT, "Coffee");
        intent.putExtra(Intent.EXTRA_TEXT, priceMessage);
        if(intent.resolveActivity(getPackageManager()) != null){
            startActivity(intent);
        }
Все отправляет и текст и тему, но спрашивает, через что открывать - через имейл, хром, блютуз, гугл драйв и т.д предлагает. Можно выбрать (always) через имейл и будет всегда по идее через него открывать и запрашивать выбор перестанет.
Hokkaido Уровень 2
17 мая 2024

        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setData(Uri.parse("mailto:"));
        intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"cafe_in_jonny@gmail.com"});
        intent.putExtra(Intent.EXTRA_SUBJECT, "Coffee");
        intent.putExtra(Intent.EXTRA_TEXT, priceMessage);

        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        } else {
            Toast.makeText(this, "No email client installed.", Toast.LENGTH_SHORT).show();
        }
И вот так тоже работает. На эмуляторе лично у меня не находило приложение через которое можно обработать данный Intent, хоть он там и есть, поэтому срабатывал Toast, а вот на физ девайсе все прекрасно работало. Без if() проверки на эмуляторе все работало. Проверка на

if(intent.resolveActivity(getPackageManager()) != null) 
необходима. Ибо если на телефоне нету приложения через которое можно обработать Intent, будет краш. И лучше использовать в данном случае ACTION_SEND, он более универсален и работает с большим количеством приложений. Можно сравнить два кода, тот который я кидал в первом сообщении с тем который кидал тут. В первом для обработки будет больше приложений, как я и описывал выше. Этот код, кстати не работал на эмуляторе из-за схемы Url"mailto:" из за того, что не все приложения электронной почты могут его обрабатывать, хотя на физ. девайсе все работает.
Миша Зефир Уровень 19
29 декабря 2021
Если ты так же как и я в шоксе от происходящего, держи первую необходимую помощь. https://www.youtube.com/watch?v=jazmVOYsun8&list=PLAma_mKffTOT_bGrVruy1_JxkFLjh5sfF&index=17 https://www.youtube.com/watch?v=jFEEemoNpxo&list=PLAma_mKffTOT_bGrVruy1_JxkFLjh5sfF&index=19
Lina Buller Уровень 32
10 декабря 2021
Если выбрать это

setType("message/rfc822")
то будет предлагать только мессенжеры и почту
24 мая 2021
Сделал. DanTel 24.05.2021
🦔 Виктор Уровень 20 Expert
2 декабря 2020
1. Сейчас эмуляторы далеко продвинулись, можно смело на них проверять. Естественно, нужен установленный почтовый клиент и учётка для отправки письма. 2. Открываем справочник, находим EMAIL, смотрим пример. 3. У меня ACTION_SENDTO не сработало, отработало просто ACTION_SEND. 4. Без установки типа через метод setType() отправлять НЕ будет. 5. На проверке может ли кто-то обработать действие, дёрнулась рука обработать исключениями с блоками try catch ; ) 6. Всё получится!
Paul Soia Уровень 26
30 июля 2020
раньше в эмуляторах не было гугл сервисов, сейчас есть, вот оно и работает уже
Антон Уровень 40
6 апреля 2020
На эмуляторе работает.
cepzik Уровень 3
28 сентября 2019
Денис Уровень 4
19 апреля 2019
может кому пригодится КОД
Name Unknown ;) Уровень 2
5 февраля 2021
Вот здесь

if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(Intent.createChooser(intent, getString(R.string.сhoose_email_app)));
}
у меня были проблемы с getString(R.string.сhoose_email_app) попробовал переделать в getString(intent) всё равно не сработало, но пофиг, я уже здесь в одном из комментов расписал, что у меня сработало