-
Постов
69 -
Зарегистрирован
-
Посещение
-
Победитель дней
6
Сообщения, опубликованные Belov.V.
-
-
Сделал не через подписку, а через событие запуска или вывода приложения из спящего режима.
Регистрация на обработку файла по типу через <intent-filter> в AndroidManifest.xml
Как писал выше, метод через подписку не сработает, если приложение на момент создания Intent системой не было запущено. Полную реализацию обязательно выложу, вот только бы до файла добраться.
-
Вопрос в продолжение темы.
Добрался до получении файла или пути к нему:
var uri : Jnet_Uri; uriStr : String; .... begin ... if TJIntent.JavaClass.ACTION_VIEW.equals(intent.getAction) then begin uri := intent.getData; uriStr := JStringToString(intent.getData.getEncodedPath);
Не могу вытащить содержимое. Из uri или uriStr разными способами getPath, toString или через JURIToStr() ) можно вытащить строку двух видов (для примера событие активировалось из почтового приложения):
content: //...../messages/2687/attachments/0.1/BEST/false или /<почтовый профиль>/messages/2687/attachments/0.1/BEST/false
Ни пути ни такого файла из приложения не находится. Extras тоже пустой.
Как из intent.getData получить контент? Кто мысль подкинет.?
-
Все же путь подписи на получение широковещательную рассылку кмк не верный, т.к. приложение может быть не запущено, а событие в системе уже произошло (к примеру проводится вызов для обработки файла, полученного по почте, а приложение на событие не подписано, т.к. на момент вызова не запущено).В любом случае проверил - приложение активируется (или запускается, или выводится из бека), т.к. зарегистрировано через <intent-filter>. При этом рассылка TMessageResultNotification не поступает.Приведенный выше пример о другом - это вариант обмена данными между своими приложениями. Возможно я что-то не так понимаю. :-(
-
Добрый день,
Я думаю эта тема вам поможет: [Android] Как в вызываемом приложении получить результат, объект JIntent?
Приложение делает широковещательную рассылку с сообщением TMessageResultNotification
Ярослав, спасибо!
Эту тему смотрел, но попробую еще раз покрутить. У меня почему то TMessageResultNotification.Value всегда неопределенный возвращался (и оба *Code всегда нулевые). В результате из него ничего, кроме вылетания приложения получить не удавалось.
Как минимум, если точно делается широковещательная рассылка TMessageResultNotification направление копания понятно.
-
Приложение зарегистрировано для обработки файла по типу через файл манифеста (неявное намерение).
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/xml" /> </intent-filter>
В списке выбора появляется. Как корректно в приложении получить содержание Intent (имя файла, путь)?
Пробовал реализовать через подписку на получение сообщения на изменение статуса приложения:TMessageManager.DefaultManager.SubscribeToMessage(TApplicationEventMessage, DoApplicationEventChanged);
При этом событие вызвавшее активацию определить можно, но вот как добраться до Intent не пойму:
procedure TForm1.DoApplicationEventChanged(const Sender: TObject; const Message: TMessage); var Intent : JIntent; app_data : TApplicationEventData; begin if not(Message is TApplicationEventMessage) then exit; app_data := TApplicationEventMessage(Message).Value; case app_data.Event of FinishedLaunching, BecameActive : .... end; end;
Что-то застрял я на этом. Как вообще добраться до открывшего приложение Intent?Если реализовывать через IFMXApplicationEventService вопрос в итоге такой же.Если есть описание реализации аналогичного функционала для iOS, буду благодарен. -
"... процесс передачи двух событий: картинка+текст в постороннее приложение"
Возможно вопрос все же не про два Intent, а как написано выше про Exstra?
Если к примеру для отправки по e-mail, то текст и присоединенный файл можно.
Вот тут пример реализации: http://fire-monkey.ru/topic/698-otpravka-failov-cherez-namerenie/?p=4918
-
BurcevD, да вроде как все в вашем примере работает. По крайне мере проверил для 'txt' и 'jpg', сохранив рабочий файл в:
// Path fileaFileName := TPath.Combine(TPath.GetSharedDownloadsPath, 'sample-temp.jpg'); -
Путем поисков и мучений:
uses FMX.Helpers.Android, // Androidapi.IOUtils, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNIBridge, Androidapi.JNI.JavaTypes, Androidapi.JNI.Net, Androidapi.JNI.Os; ... var Intent : JIntent; uri : Jnet_Uri; j_file : JFile; f_name : string; ... begin // имя пересылаемого файла f_name := 'picture.png'; // файл должен быть сохранен по пути: Androidapi.IOUtils.getExternalFilesDir // или тоже самое: GetPublicPath // К примеру: ...SaveToFile(TPath.Combine(TPath.GetPublicPath, f_name)); Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_SEND); Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString('....')); // тема, если нужно Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString('....')); // текст сообщения, если нужно // прикрепляем файл j_file := SharedActivity.getExternalFilesDir(StringToJString(f_name)); uri := TJnet_Uri.JavaClass.fromFile(j_file); Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM,TJParcelable.Wrap((uri as ILocalObject).GetObjectID)); Intent.setType(StringToJString('vnd.android.cursor.dir/email')); // SharedActivity.startActivity(Intent); end;
Как приаттачить файл по любому другому пути не знаю.
-
Уважаемый Ra72, мне кажется Вы ушли в неверную сторону при поиске решения, пытаясь подписывать приложение отладочным ключем.
Используя свой ключ Вы можете создавать приложения как в режиме «Debug», так и в режиме «Application Store».
То, какое приложение «билдится», Вы определяется в «Build Configurations».
А то, каким ключом приложение подписывается Вы устанавливаете в «Target Platforms - Android… - Configuration (Debug или Application store)».
Для решения задачи совместной работы на разных устройствах, сформируйте свой ключ подписи. Разместите его на стационарный ПК и ноутбук. Установите в «Target Platforms - Android… - Configuration = «Application store». Далее Вы можете менять в «Build Configurations» тип приложения (следите, первый раз меняются синхронно). При этом обе создаваемые версии (Debug и Release) существуют на андроиде в списке приложений независимо. !!!Но вот если нужен режим отладки, то тут да, кроме как использовать debug.keystore другого я способа я не знаю.
-
Я сделал как выше описал и пока успокоился. На MacOS 10.10 и 9.5 работает. Для меня временно задача решена.
-
Частицы 3D
в 3D
По face tracking на FireMonkey ничего интересного не попадалось?
-
Wamaco, решение пока одно - отказаться от xcode 6.2
Все что мы описывали с невидимостью SDK iOS 7.1 относится именно к этой версии.
1) удаляем xcode 6.2;
2) устанавливаем xcode 6.1.1;
3) скачиваем на мак SDK iOS 7.1;
4) теперь RAD для симулятора увидит две версии SDK, но!... можно в RAD установить только одни SDK 8.1
Где-то в документации попадалось, что xcode 6 сам выбирает нужную версию SDK, а так как он пока в симуляторе 8.1 с PAServer-ом не дружит, всегда переключает на симуляцию iOS 7.1 (выше про такой эффект писали);
В итоге в симуляторе всегда IOS 7.1, а в iOS Devices нормально собираются приложения под iOS 8;
... и ждем обновлений....
-
Wamaco, ошибка в логе. Я в сообщении выше лог запуска "прицепил", сравни с тем что у тебя. Скорее всего тоже самое.
Почему SDK только один, тоже в конце есть. Как исправить пока не знаю.
-
Плюсую по проблеме запуска приложения в симуляторе. Первый раз столкнулся с выходом 6-го xCode. Те же приложения на xCode 5 в симуляторе запускались без ошибки. От версии SDK у меня результат не зависил (пробовал и 7 и 8).
Откатился на xCode 5. Другого решения не искал, т.к. было не критично, решил что баг шестерки и его быстро поправят.
Сейчас новое железо с OS X 10.10.2, xCode 6.2 (5-ку не поставить), установлены SDK iOS 8.2 и iOS 7.1.
Проблему получил снова. В логах симулятора 8.2 при запуске простейшего приложения вот такая диагностика:
Process: GetAllPath [508]
Path: /Users/USER/Library/Developer/CoreSimulator/Devices/5C445C3A-8B64-449A-9872-287E2C330BBD/data/Containers/Bundle/Application/E8E8FCC0-6CD0-4001-8D28-2F7FF9DFCD3D/GetAllPath.app/GetAllPath
Identifier: GetAllPath
Version: ???
Code Type: X86 (Native)
Parent Process: launchd_sim [338]
Responsible: launchd_sim [338]
User ID: 501
Date/Time: 2015-03-12 18:42:37.408 +0300
OS Version: Mac OS X 10.10.2 (14C1510)
Report Version: 11
Anonymous UUID: 6871E7AB-A22C-7B2F-9FFA-E7F7B549C12F
Time Awake Since Boot: 950 seconds
Crashed Thread: 0
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Application Specific Information:
dyld: launch, loading dependent libraries
DYLD_SHARED_REGION=avoid
DYLD_ROOT_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk
DYLD_FALLBACK_FRAMEWORK_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks
DYLD_FALLBACK_LIBRARY_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib
DYLD_FALLBACK_FRAMEWORK_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks
DYLD_FALLBACK_LIBRARY_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib
Dyld Error Message:
missing LC_DYLD_INFO load command
Binary Images:
0xc8a000 - 0xcae44b +dyld_sim (353.2.1) <26A9F7ED-911A-38B9-B8EB-E30B7C3619E6> /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/dyld_sim
0x8fe71000 - 0x8fea4e03 dyld (353.2.1) <06B1254D-9BB9-327C-BA15-8F18FFF97586> /usr/lib/dyldКстати, с версиями SDK в 6.2 что-то тоже интересное. Почитал обсуждение выше и решил установить симуляторе iOS 7.1 Скачал, установил, все перезапустил, в эмуляторе 7.1 появилось. Но PAServer SDK iOS 7.1 не видит (RAD естественно тоже).
Проверил через консоль:
MBP:$ /usr/bin/xcodebuild -version -sdk | grep SDKVersion
SDKVersion: 10.9
SDKVersion: 10.10
SDKVersion: 8.2
SDKVersion: 8.2
Или:
MBP:bin $xcodebuild -showsdks
OS X SDKs:
OS X 10.9 -sdk macosx10.9
OS X 10.10 -sdk macosx10.10
iOS SDKs:
iOS 8.2 -sdk iphoneos8.2
iOS Simulator SDKs:
Simulator - iOS 8.2 -sdk iphonesimulator8.2Где-то он в общем «потерялся»
-
А если обработчик повесить на каждый итем при его создании и для каждого не забыть установить HitTest.
Что-то типа:
i := ListBox.Items.Add('Ваше содержание...');
ListBox.ListItems.HitTest := True;
ListBox.ListItems.OnApplyStyleLookup := Self.Doapplys;(Возможно из описания не совсем понял постановку задачи, но примерно то что выше у меня работает)
-
С удалением строк из Button2Click, после изменения TSearchBox (не важно, в каком состоянии его оставить), тоже ошибки начинают возникать. Причем там вообще жестко.
Помогает тупое передергивание значение фильтра, пусть даже он был пустой:
var s : string;beginListBox1.Items.Delete(0);//s := SearchBox1.Text;SearchBox1.Text := s+'`';SearchBox1.Text := s;end;Примерно таким путем можно бороться с ошибкой при добавлении итемов (убрать сортировку, добавить итем, дернуть фильтр, последняя строка наша добавленная, восстанавливаем состояние на момент "до добавления"), но как-то все это.... стыдновато за такой код. :-( -
К сожалению этот вопрос до сих пор не имеет однозначного ответа.
А вопрос такой, какой индекс итема должен вернуться?
- Индекс в отфильтрованном списке
- или индекс в исходном?
В текущей реализации возвращается индекс в отфильтрованном списке. Поэтому если добавляемый итем не попадает под условие фильтра, то функция возвращает -1. А если попадет, то она вернет индекс в отфильтрованном списке.
Индекс в отфильтрованном не возвращает ни в каком варианте.
- Если список не упорядочен (ListBox1.Sorted:=False), то возвращается индекс последнего добавленного по порядку (0,1,2,3 и т.д.). Из вопроса выше - 2-й вариант.
- Если список упорядочить (ListBox1.Sorted:=True), по возвращается индекс в упорядоченном списке. Тут вроде все корректно работает.
Но это варианты с сортировкой.
Если же мы устанавливаем значение TSearchBox, который действительно в данном случае выступает как фильтр, то при добавлении нового итема, вне зависимости от того попадает в фильтр или нет, всегда получаем "-1". В общем-то для упрощения я указал в п.3 (Очищаем TSearchBox). При пустом фильтре все равно "-1".
ListBox1.Count тоже начинает "глючить". Не показывает верное значение, пока повторно не установишь /сбросишь значение в TSearchBox.
Пробовал после использования TSearchBox вообще этот объект "убивать". Все равно последствия его применения остаются.
-
Столкнулся с такой ситуацией.1) Заполняем TListBox;2) Пользуемся поиском через TSearchBox;3) Очищаем TSearchBox;4) При попытке добавить любой новый элемент в TListBox, всегда возвращается индекс добавленного элемента "-1".Накидал пример для экспериментов, упростив до безобразия (прикрепляю).Как восстановить возможность получать индекс добавленного элемента?
[Android] Обработка приложением неявного намерения (Intent)
в Намерения (Intent)
Опубликовано
Вот по такому принципу http://stackoverflow.com/questions/10386885/intent-filter-intent-getdata-returns-null
Но у меня Extras пустой JBandle возвращает.