Delphi android intent отправить с помощью мессенджеры

«Общение» сервиса и приложения через intent

Ответ от Rusland,
19 января, 2016

Вопрос

Rusland

Rusland

Пишут про некие intent, с помощью которых можно наладить «общение» между сервисом и приложением.

Расскажите как это делается? Поделитесь кодом, чтобы в голове прояснилось

Ссылка на комментарий

12 ответов на этот вопрос

Рекомендуемые сообщения

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Похожий контент

На основе нескольких тем форума сделал службу перехвата звонков и номера телефона.
http://fire-monkey.ru/topic/3878-статьякак-создать-простой-android-broadcast-receiver-how-to-implement-simplest-android-broadcast-receiver-in-delphi/
http://fire-monkey.ru/topic/2386-перехват-события-звонка/
http://fire-monkey.ru/topic/2972-использование-нативных-localbroadcastmanager-и-broadcastreceiver/
Покритикуйте пожалуйста. Уверен, что не всё правильно.
Но что до ума не удалось довести, так это то, как правильно останавливать службу и закрывать приложение.
Проект (для Токио) приложил теме.
Заранее благодарен.

Здравствуйте.
Пишу на Delphi 7. И все было нормально пока не у нас не появился терминал сбора данных на Androide. На Delphi 10 написал простенькое приложение. Но тут встала проблема с занесением данных в поле ввода со сканера штрихкода. В инете нашел, что это дело просто решается интентами. Вообще в windows я подобное делал: вешал процесс, следящий за com-портом, и при появлении данных на нем пересылал их куда надо. В Android должно быть не сложнее. Но я запутался во всей этой куче параметров и функций, передаваемых и получаемых «намерениями».
В общем вот что мы имеем на данный момент.
В настройках сканера прописано:

Intent output — android.intent.ACTION_DECODE_DATA Intent string extra — barcode_string На просторах нашел запуск BroadcastReceiver.
На событие получения сообщения повесил
ed.Text := JStringToString(csIntent.getExtras.getString(TJIntent.JavaClass.EXTRA_INTENT)); где csIntent параметр из BroadcastReceiverOnReceive(csContext: JContext; csIntent: JIntent); Но ничего не выходит.
Я подозреваю, что данные из сканера где-то в структуре csIntent. Но, к сожалению, в отладке дальше адреса этой переменной пробраться не получилось.
Причем строка ed.Text := JStringToString(csIntent.getAction); возвращает в Text название интента: «android.intent.ACTION_DECODE_DATA».
Помогите разобраться со структурой JIntent. Спасибо.

Здравствуйте. Пришла беда откуда не ждал, Delphi 10.2 не знает библиотеки androidapi. FMX.Helpers. и тд и тп. И никак не получается их установить, либо я тупой либо я даже незнаю что может быть. фалы *.dcu лежат в папке . \lib\android\release.
Помогите решить проблему очень нужно использовать намерения. уже и переустанавливал платформу android не помогает.

procedure TfMain.PhotoClick(Sender: TObject); var sPath,FLastPhotoName:string; <$IF DEFINED(ANDROID)>PhotoIntent: JIntent; photoUri: Jnet_Uri; JFileName: JFile; <$ENDIF>begin <$IF DEFINED(ANDROID)>FLastPhotoName := »; FLastPhotoFullName := »; FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage); PhotoIntent := TJIntent.JavaClass.init(TJMediaStore.JavaClass.ACTION_IMAGE_CAPTURE); if (PhotoIntent.resolveActivity(TAndroidHelper.Context.getPackageManager()) <> nil) then begin FLastPhotoName := THashMD5.GetHashString(‘JPEG PHOTO FILE ‘ + DateTimeToStr(Now)) + ‘.jpg’; FLastPhotoFullName := TPath.Combine(TPath.GetSharedDocumentsPath, FLastPhotoName); JFileName := TJFile.JavaClass.init(StringToJString(FLastPhotoFullName)); photoUri := TJnet_Uri.JavaClass.fromFile(JFileName); PhotoIntent.putExtra(TJMediaStore.JavaClass.EXTRA_OUTPUT, TJParcelable.Wrap((photoUri as ILocalObject).GetObjectID)); if PhotoIntent.resolveActivity(TAndroidHelper.Activity.getPackageManager) <> nil then TAndroidHelper.Activity.startActivityForResult(PhotoIntent, REQUEST_IMAGE_CAPTURE); end; <$ENDIF>
Приложение камеры открывается, фото делается, но при закрытии приложение вылетает
В логах ошибки
java.lang.RuntimeException: Failure delivering result ResultInfo to activity : java.lang.NullPointerException

Читайте также:  Как подключить wifi с ноутбука с андроид

Подскажите пожалуйста как определить что программа запустилась из AlarmManager?
Я сделал это так, по аналогии с http://stackoverflow.com/questions/6751564/how-to-pass-a-boolean-between-intents
В Java коде, который компилиться в итоге в classes.dex (с XE7 не нужен DEX файл, можно подключить Jar файл сразу к проекту!), добавил строчку
public class AlarmReceiver extends BroadcastReceiver <
public void onReceive(Context context, Intent intent) <
Intent TestLauncher = new Intent();
TestLauncher.setClassName(context, «com.embarcadero.firemonkey.FMXNativeActivity»);
TestLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
TestLauncher.putExtra(«StartedFromAM», true);
context.startActivity(TestLauncher);
>
>
По идее теперь при старте из AlarmManager, должно быть true в активити.
Из Delphi пытаюсь получить это значение, но всегда возвращает false (0).
ShowMessage(SharedActivity.getIntent.getBooleanExtra(StringToJString(‘StartedFromAM’), false).ToString );
И вот так тоже:
ShowMessage ( MainActivity.getIntent.getBooleanExtra(StringToJString(‘StartedFromAM’), false).ToString);
Не подскажете в чем может быть проблема?

В Android 6 на Berlin 10.1.1 перестала работать стандартная функция TakePhotoFromCameraAction.

Иногда работает, иногда нет.
Поэтому я решил написать нативную замену этой функции. За основу взят пример с портала разработчиков Android.
Мой пример про видео на базе отправки Intetn смартфону и получение результата в виде другого Intent, отлично работает.
Но для фотографий этот пример сыпется, после выполнения фотографирования система возвращается в мое приложение и оно вылетает с ошибкой:
Если заглянуть в исходнки, там все обвязано сообщениями в лог монитора. Последнее сообщение «+ Intent is sent».
Помогите пожалуйста разобраться, в чем может быть проблема?

Знающие люди, подскажите пожалуйста, как в iOS одно приложение может запустить другое приложение, как передать картинку в другое приложение, готовое его принять, как при запуске обрабатывать в своем приложении параметры, переданные из другого приложения?
В Android для этого есть механизм Intent Filter, а как это устроено в iOS, и как с этим работать в RAD Studio?

Источник

Полный список

— передаем данные с помощью Intent

На прошлых уроках мы узнали, что такое Intent и как им пользоваться. Из одного Activity мы просто вызывали другое, передавая action. Теперь научимся передавать данные. Сделаем простейшее приложение. На первом экране мы будем вводить наше имя и фамилию, а второй экран будет эти данные отображать. Передавать данные будем внутри Intent.

Читайте также:  Как платить телефоном вместо карты сбербанка андроид zte

Создадим проект:

Project name: P0281_IntentExtras
Build Target: Android 2.3.3
Application name: IntentExtras
Package name: ru.startandroid.develop.p0281intentextras
Create Activity: MainActivity

Открываем main.xml и рисуем экран с полями и кнопкой отправки:

В EditText будем вводить имя и фамилию, а кнопка Submit будет вызывать другой экран и передавать ему эти данные.

Пишем код для MainActivity.java:

Определяем поля ввода и кнопку. Кнопке присваиваем обработчик – Activity (this). Рассмотрим реализацию метода onClick. Мы создаем Intent с использованием класса, а не action. Если помните, с такого способа мы начинали знакомство с Intent. Напомню — это означает, что система просмотрит манифест файл нашего приложения, и если найдет Activity с таким классом – отобразит его. ViewActivity пока не создан, поэтому код будет подчеркнут красным. Это не мешает нам сохранить файл. Чуть позже мы создадим это Activity и ошибка исчезнет.

Итак, Intent создан, смотрим код дальше. Используется метод putExtra. Он имеет множество вариаций и аналогичен методу put для Map, т.е. добавляет к объекту пару. Первый параметр – это ключ(имя), второй — значение.

Мы поместили в Intent два объекта с именами: fname и lname. fname содержит значение поля etFName, lname – значение поля etLName. Остается только отправить укомплектованный Intent с помощью метода startActivity.

Теперь создадим второе Activity. Назовем его ViewActivity.

Создаем для него layout-файл view.xml:

Здесь просто TextView, который будет отображать пришедшие данные.

Создаем класс ViewActivity. И пишем код:

Находим TextView, затем получаем Intent и извлекаем из него String-объекты с именами fname и lname. Это те самые значения, которые мы помещали в коде MainActivity.java. Формируем строку вывода в TextView с использованием полученных данных.

Не забудьте прописать ViewActivity в манифесте. На этот раз никаких Intent Filter не нужно, т.к. мы точно знаем имя класса Activity и используем явный вызов.

Все сохраним и запустим.

Видим такой экран:

Заполняете поля как пожелаете. Я напишу John в поле First Name и Smith в поле Last Name.

ViewActivity отобразилось, считало данные из Intent и вывело их на экран.

Поместить в Intent можно данные не только типа String. В списке методов Intent можно посмотреть все многообразие типов, которые умеет принимать на вход метод putExtra.

На следующем уроке:

— вызываем Activity с возвратом результата

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

Читайте также:  Форматы для телефонов андроид

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Delphi XE5: использование Intent (намерения) в Android

Одной из многочисленных фич операционной системы Android является использование намерений (Intent). По сути Intent представляет собой механизм описания одной операции, которую необходимо выполнить – выбрать изображение, отправить сообщение в Facebook, отправить письмо и т.д. Многие приложения используют Intent для своей работы. Наиболее часто используемой возможностью Intent является запуск в своем приложении другой активности (например, вызвать из своего приложения Dropbox для сохранения файла). Однако на этом возможности Intent не заканчиваются. Так, используя Intent мы можем:

  • выполнить какое-либо действие
  • запустить сервис
  • отправить уведомление о каком-либо событии.

В Delphi XE5 для работы с намерениями нам потребуется интерфейс JIntent о котором я очень кратко (буквально в пару строк кода) рассказывал в предыдущей статье, посвященной разработке для андроид в Delphi. Сегодня я постараюсь более подробно разобраться с работой механизма намерений и разобрать ещё несколько примеров по его использованию. Намерение (Intent) может быть двух видов – явным и неявным.Если говорить кратко, то в явном намерении мы однозначно (явно) указываем какую активность нам необходимо вызвать для чего указываем намерению необходимый класс. Например, мы можем создать намерение на запуск приложения Twitter (если, конечно. оно установлено на устройстве). Вместе с указанием класса мы также можем указать и необходимый набор данных, которые будут переданы в принимающую активность (например, текст сообщения для Twitter). В случае же использования неявных намерений система Андроид сама определяет перечень активностей, которые могут обработать передаваемые данные. Например, ниже представлен скриншот, на котором показано какие приложения Android выбрал для отправки простого текста:

На первый взгляд может показаться странным, что Android вдруг выбрал для работы с обычной строкой текста SkyDrive (а выше по списку и Dropbox), но на деле эта строка текста будет сохранена в текстовый файл и отправлена в облако…Но мы сегодня немного не об этом.

Как Android “понимает” какие из доступных нам активностей можно использовать для работы с передаваемыми данными? Ответ заключается в трех возможных параметрах, используемых в намерениях: действие (action), данные (data) и категория (category). Используя только три этих параметра Android и “угадывает”, что мы от него хотим. Ну, например, вернемся к рассмотренному ранее примеру – открытие ссылки в браузере:

Источник

Оцените статью