@xamarin_russia

Страница 293 из 619
Фёдор
13.02.2018
11:52:20
Добрые ксамаритяне! Нужен ваш совет. Я тех.дир в Фабрика Юзабилити, мы делаем сервис для дистанционных немодерируемых юзабилити-исследований. У нас есть нативные приложения и SDK, которые записывают действия респондентов в ходе теста. Начали обращаться крупные клиенты с xamarin-приложениями и встал вопрос сделать наше SDK как xamarin-plugin. Чисто технически вроде необходимые нам API доступны из Xamarin. Но в нативных приложениях наш код работает в фоне (пишет экран/координаты), а в xamarin мне вообще не понятно как сделать выполнение в отдельных фоновых процессах. Подскажите - это возможно? Какие подводные камни? iOS захватывает экран фоновым процессом через GetImageFromCurrentImageContext (), потом собирает видео из скриншотов, Android пишет через MediaProjection.

Kirill
13.02.2018
11:53:28
В вашем случае, я бы порекомендовал просто сделать биндинг вашей библиотеки в C# что бы не нарушать DRY

https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/ https://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/

Google
Фёдор
13.02.2018
11:56:14
Спасибо, очень интересно, я не находил этого. А не будет подавления наших фоновых процессов? Сейчас на iOS и в нативном виде это иногда происходит..

Фёдор
13.02.2018
12:00:23
И последний вопрос - вызов через URL_schema в xamarin нормально работает, параметры запроса в нашу прибиндиную библиотеку можно пробросить, она не замурована? 8 -)

Kirill
13.02.2018
12:00:55
Можно

https://developer.xamarin.com/api/type/Android.App.IntentFilterAttribute/

Фёдор
13.02.2018
12:19:59
В чистом xamarin я думаю всё ок, а вот по прокидыванию в кусок стороннего уже скомпилированного кода, у меня были сомнения, которые Кирилл развеял.

SkromRatClub
13.02.2018
12:21:40
подскажите если я регистрирую receiver таким вот оброзом:

RegisterReceiver(_receiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));

то этот рецейвер будет срабатывать даже при выключенном приложении?

как только прийдет смс

или я неправильно понял?

Denis
13.02.2018
12:35:58
если приложение запущено. Что бы всегда срабатывало надо в аттрибутах класса (который наследуется от BroadcastReceiver) регистрировать [BroadcastReceiver(Label = "SMS Receiver")] [IntentFilter(new string[] { "android.provider.Telephony.SMS_RECEIVED" })]

Google
SkromRatClub
13.02.2018
12:42:06
спасибо сейчас проверю

всеровно после закрытия программы уже не срабатывает

что я делаю не так?

Kirill
13.02.2018
12:57:30
SkromRatClub
13.02.2018
12:57:49
Да

Но мой телефон убивает процесс если закрывать из списка недавних.

Kirill
13.02.2018
12:59:38
Но мой телефон убивает процесс если закрывать из списка недавних.
ну такое закрытие убивает полностью и система может не присылать в него сообщения. 100% получения нет. Возможно если установить приложение, как клиент смс, то будет приходить, но это не точно

SkromRatClub
13.02.2018
13:00:31
Блин я тут уже 3 дня сижу. Знаю что так делали точно. Но как это зделать немогу понять...

Может есть какието костыли?

Дело в том что если свернуть приложение на телефоне то через некоторое время мой телефон сам его убьет для освобождения ресурсов

Значит я был прав иделать нужно через службу. Но как зделать эту службу чтобы она не выключалась?

Valeriy
13.02.2018
13:03:38
это не процесс

Короче надо почитать про регистрацию ресиверов

Есть программно в коде, есть в манифесте

SkromRatClub
13.02.2018
13:04:37
Я за три дня уже столько перечитал и нечего не помогло) уже незнаю что делать)

Valeriy
13.02.2018
13:05:38
ща скину книгу где почитать можно

Kirill
13.02.2018
13:05:39
Значит я был прав иделать нужно через службу. Но как зделать эту службу чтобы она не выключалась?
чем меньше памяти служба потребляет, тем меньше шансов, что её убьет система, это первое, 2 - делать foreground службу.

Фёдор
13.02.2018
13:08:18
Есть различие между чистым Android и кастомными MUI, FlyMeOS и прочими. На кастомных разрешены только собственные приложения из белого списка, остальные убиваются на фоне и при блокировке. Samsung тоже в эту сторону идёт, но пока по умолчанию ещё разрешает. На stackoverflow есть описания у каких package_name для какой кастомной платформы какие разрешения нужно запрашивать. Для чистого андроид можно запрос разрешения на управление энергосбережением сделать. И да, foreground обязательно. У нас как раз такое фоновое приложение, которое система постоянно пытается убить. 8 -)

Valeriy
13.02.2018
13:10:26
А покажи код

И манифест

Google
SkromRatClub
13.02.2018
13:10:38
Вот у меня как раз таки сяоми, но суть в том что у других пока не сяоми

Спасибо за файл

Сек сейчас скину

Код

Valeriy
13.02.2018
13:11:04
просто это не процесс, грубо говоря бродкаст ресивер это подписка на событие в телефоне

он срабатывать должен в любом случае

SkromRatClub
13.02.2018
13:11:49
z vjue afqkjv rbyenm

могу файлом кинуть

Удаляеться изображение только у меня или в чате тоже?

Valeriy
13.02.2018
13:14:00
на gist залей просто

SkromRatClub
13.02.2018
13:15:53
frrfeynf yf ubnt ytn

аккаунта на гите нет

тут 2 класса которые и находяться в проекте больше нечего нетэ

Denis
13.02.2018
13:16:42
разрешения в манифесте стоят? target платформы какой?

SkromRatClub
13.02.2018
13:16:43
ах да и манифест еще

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.test2" android:installLocation="auto"> <uses-sdk android:minSdkVersion="15" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <application android:label="test2.Android"></application> </manifest>



картинкой удобнее будет

Valeriy
13.02.2018
13:18:31
смотри

Можно регать программно а можно через манифест (это атрибуты в xamarin)

Google
Valeriy
13.02.2018
13:19:11
убери RegisterReceiver

оставь просто класс

SkromRatClub
13.02.2018
13:20:06
убрал.

Valeriy
13.02.2018
13:20:23
и попробуй [BroadcastReceiver(Enabled = true, Label = "SMS Receiver")] [IntentFilter(new string[] { "android.provider.Telephony.SMS_RECEIVED" }, Priority = (int)IntentFilterPriority.HighPriority)]

Valeriy
13.02.2018
13:20:49
Context-registered receivers receive broadcasts as long as their registering context is valid. For an example, if you register within an Activity context, you receive broadcasts as long as the activity is not destroyed. If you register with the Application context, you receive broadcasts as long as the app is running.

If you declare a broadcast receiver in your manifest, the system launches your app (if the app is not already running) when the broadcast is sent.

Denis
13.02.2018
13:21:57
@SkromRatClub версия ОС какая у девайса?

SkromRatClub
13.02.2018
13:22:11
6,0

Denis
13.02.2018
13:22:38
рантайм пермишн обработай и все заработает

SkromRatClub
13.02.2018
13:22:40
If you declare a broadcast receiver in your manifest, the system launches your app (if the app is not already running) when the broadcast is sent.
я понял, этого я не знал. а как мне зделать это через манифест тогда?

Valeriy
13.02.2018
13:22:51
ну эти атрибуты и есть манифест

в замарине

так же и активити атрибутом регистрируются

Denis
13.02.2018
13:23:45
https://stackoverflow.com/questions/32635704/android-permission-doesnt-work-even-if-i-have-declared-it

Alex
13.02.2018
13:23:55
Кто нибудь работает с Xamarin iOS из винды? Есть несколько вопросов

SkromRatClub
13.02.2018
13:23:59
рантайм пермишн обработай и все заработает
немного не понял кого обработать?))

Valeriy
13.02.2018
13:26:16
А оно работало когда ты в приложении был?

Denis
13.02.2018
13:26:36
просто в манифесте недостаточно указать разрешения, с 6-й версии в приложении надо "опасным" permissions дать разрешения

Valeriy
13.02.2018
13:26:38
можно пермишн дать в настройках приложения и проверить

Google
SkromRatClub
13.02.2018
13:30:18
checkSelfPermission()и requestPermissions() как их использовать?

Alex
13.02.2018
13:31:49
многие. Давай сразу вопрос
Есть вертикальный StackView, в котором расположены элементы. Мне необходимо подогнать это под все экраны. Вроде задача простая, выставить по краям констранты и решить этот вопрос, но все уезжает.

Alex
13.02.2018
13:36:13
лучше в xcode делать верстку
ага, это я же понял. VC вообще неадекватно реагирует на работу со StackView, падает через каждые пол часа. может допилят потом. кстати, не знаешь, можно ли синхронизировать Storyboard с xcode или только ручками постоянно переносить их?

Александр
13.02.2018
13:52:48


Vadzim
13.02.2018
13:53:57
ага, это я же понял. VC вообще неадекватно реагирует на работу со StackView, падает через каждые пол часа. может допилят потом. кстати, не знаешь, можно ли синхронизировать Storyboard с xcode или только ручками постоянно переносить их?
если работать с VS на маке, то сториборд легко открыть с салюшена в xCode дизайнере, что позволяет синхронизировать сториборд. К примеру, что-то добавил в xCode дизайнере, потом переключился на VS и VS тут же обновила сториборд.

Alex
13.02.2018
13:55:11
тебе нужно с помощью констрант примагнитеть ее к верхнему краю. после кнопка должна загареться синим цветом

Denis
13.02.2018
13:57:15
в xcode можно смотреть как будет выглядеть интерфейс на экране девайса. У вас размещает согласно вашим constraint, пунктирные линии - это фактическое размещение

Александр
13.02.2018
13:59:49
Я так понимаю что дизайн под яблоко на xml не пишется?

Alex
13.02.2018
14:01:36
Я так понимаю что дизайн под яблоко на xml не пишется?
ууу, у них там своя целая религия разработки UI, в которую непривычному человеку трудно понять. Либо из кода, либо сториборд.

Pavel
13.02.2018
14:02:34
Уууууу

Страница 293 из 619