Перейти к содержанию
Fire Monkey от А до Я

r@di0

Пользователи
  • Постов

    12
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4

Сообщения, опубликованные r@di0

  1. Вы вообще пробовали приведенный код? Он не имеет отношения к WakeLock, а как раз добавляет приложение в WhiteList.
    Если Вы хотите сделать "неубиваемое" приложение, то Вам не получится обойтись каким-то легким решением. Особенно если приложению необходимо использовать сеть. Почитайте про doze mode.
    Можете ещё посмотреть эту статью: http://delphiworlds.com/2018/01/monitoring-location-updates-on-android/
    Там предпринята попытка сделать подобное "неубиваемое" приложение.

  2. Такое поведение на Андроиде с 5 версии.

    function GetPowerManager: JPowerManager;
    var
      PowerServiceNative: JObject;
    begin
      PowerServiceNative := TAndroidHelper.Context.getSystemService
        (TJContext.JavaClass.POWER_SERVICE);
      if not Assigned(PowerServiceNative) then
        raise Exception.Create('Could not locate Power Service');
      Result := TJPowerManager.Wrap((PowerServiceNative as ILocalObject)
        .GetObjectID);
      if not Assigned(Result) then
        raise Exception.Create('Could not access Power Manager');
    end;
    
    //Intent: JIntent;
    if TJBuild_VERSION.JavaClass.SDK_INT >= 23 then
    begin
    	pw := GetPowerManager;
    	if Assigned(pw) then
    	  if not pw.isIgnoringBatteryOptimizations
    		(StringToJString('ВАШ ПАКЕТ')) then
    	  begin
    		Intent := TJIntent.Create;
    		try
    		  Intent.setAction
    			(TJSettings.JavaClass.
    			ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    		  Intent.setData(TJnet_Uri.JavaClass.parse
    			(StringToJString('package:ВАШ ПАКЕТ')));
    		  TAndroidHelper.Context.startActivity(Intent);
    		except
    		  on e: Exception do
    			fgToast(e.Message, 3);
    		end;
    	  end;
    end;

     

  3. 5 часов назад, ENERGY сказал:

    А подскажите пожалуйста откуда вы брали so файл? Может там и документация есть. Я думал что bass есть только под Win. 

    http://www.un4seen.com/forum/?topic=13225.0

    Документация:

    http://www.un4seen.com/doc/

  4. Дополнение: иногда нужно, чтобы уведомления не накапливались, а отображалось только последнее. Поправил класс NotificationPublisher (см. аттач), чтобы при наличии в данных параметра "unique": false обновлялось последнее сообщение, а не добавлялись новые.

    NotificationPublisher.zip

  5. В версии Берлин есть свои особенности.
    1. Берём берлиновские java-исходники: C:\Program Files (x86)\Embarcadero\Studio\18.0\source\rtl\androiddex\java\fmx\src\
    Далее в файле NotificationPublisher.java в buildNotification правим код, чтобы использовался переданный параметр Sound (если передан):

    if (msgSound == "") { //если не передан, используем стандартный звук уведомлений
    	mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
    } else {
    	mBuilder.setSound(Uri.parse("android.resource://" + this.mContext.getPackageName() + "/raw/" + msgSound));
    }

    Подключаете класс import android.net.Uri;
    Прокидываете параметр String msgSound выше до publishGCM, а в publishGCM нужно получить из бандла параметр Sound по аналогии с другими параметрами (см. приложенный файл NotificationPublisher.java).
    Можете так же прописать mBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(msgText)); для MultiLine сообщений и сразу сделать обработку параметра icon для использования в пушах иконок отличных от иконки приложения.
    2. После того как Вы воссоздали структуру нужного пакета (в java иерархия классов определяется вложенностью папок) в нужном каталоге и внесли необходимые изменения в исходники, необходимо откомпилировать измененные классы, добавить их в исходный пакет (fmx.jar) и сформировать файл classes.dex (cм. приложенный файл install.bat):

    @echo off
    
    setlocal
    
    if x%ANDROID_SDK% == x set ANDROID_SDK="C:\Users\Public\Documents\Embarcadero\Studio\18.0\PlatformSDKs\android-sdk-windows"
    if x%JAVA% == x set JAVA="C:\Program Files\Java\jdk1.8.0_60\bin"
    set ANDROID_PLATFORM=%ANDROID_SDK%\platforms\android-22
    set DX_LIB=%ANDROID_SDK%\build-tools\27.0.3\lib
    set EMBO_DEX="C:\Program Files (x86)\Embarcadero\Studio\18.0\lib\android\release\classes.dex"
    set FMX_JAR="C:\Program Files (x86)\Embarcadero\Studio\18.0\lib\android\release\fmx.jar"
    set PROJ_DIR="C:\fmx"
    
    echo COMPILLING NotificationPublisher.java
    %JAVA%\javac -d "%PROJ_DIR%" "%PROJ_DIR%\com\embarcadero\rtl\notifications\NotificationPublisher.java" -cp "%ANDROID_PLATFORM%\android.jar";"C:\Program Files (x86)\Embarcadero\Studio\18.0\lib\android\debug\android-support-v4.jar"
    pause
    echo COPY ORIGINAL fmx.jar
    copy %FMX_JAR% %PROJ_DIR%\fmx.jar"
    echo UPDATE FILE NotificationPublisher.class
    %JAVA%\jar uf "fmx.jar" com\embarcadero\rtl\notifications\NotificationPublisher.class
    echo CONVERTING FROM jar TO dex
    call %DX_LIB%\dx.jar --dex --verbose --output=%PROJ_DIR%\output\dex\test_classes.dex --positions=lines %PROJ_DIR%\fmx.jar
    echo MERGING dex FILES
    mkdir output\dex 2> nul
    java -cp %DX_LIB%\dx.jar com.android.dx.merge.DexMerger %PROJ_DIR%\output\dex\classes.dex %PROJ_DIR%\output\dex\test_classes.dex %EMBO_DEX%
    del output\dex\test_classes.dex
    echo Now we have the end result, which is output\dex\classes.dex
    
    pause
    
    :Exit
    
    endlocal

    Поправьте PROJ_DIR на свой каталог, в котором всё лежит (у меня в C:\fmx), а так же проверьте правильность остальных путей.
    3. После того как Вы получили новый пакет fmx.jar, а так же файл classes.dex, оба файла необходимо скопировать в каталог со своим Delphi-проектом.
    4. Добавьте новый файл classes.dex в Deployment и отключите старый файл classes.dex;
    5. У нового файла classes.dex пропишите Remote Path как у старого файла (classes\);
    6. Добавьте звуковой(ые) файл(ы) для уведомлений в Deployment и пропишите Remote Path: res\raw\
    На этом подготовка IDE завершена. Что-либо отключать в IDE в разделе Libraries (напр. fmx.dex.jar) не требуется. Добавлять так же ничего не требуется.
    Если Вы ранее подключали свой fmx.dex.jar, то удалите его и включите стандартный.
    7. При отправке Push с сервера параметр Sound передавать не в Notification!, а в Data:
    $fields['data'] = array('body' => $text, 'title' => $title, 'sound' => 'neworder');
    Имя звукового файла указывается без расширения.

    fmx.zip

  6. В 19.05.2016 в 21:02, Rusland сказал:

    Подправил uChatBox.pas под себя, заменил TLabel на TText, теперь проблем с отрисовкой бордюра не наблюдаю. Добавил выделение заголовка и градиент в "облачка".

    Чат2.png

    ChatBox.zip

    Всем привет! Под Андроид у некоторых сообщений внизу создаётся лишнее пустое пространство.
    В примере это видно (выделил красным). Rad Studio 10.2 Tokyo.
    Никто это не правил?
     

    573dc67daa0a1_2.png.0084dcb7a497a64596c8120701ea74cf.png

  7. Сообществу, привет!
    Проблема следующая:

    необходимо использовать Speechkit Mobile SDK в RAD Studio XE 6.

    Это sdk идет в виде Android library project.
    Для использования сторонних java-библиотек в RAD Studio формируются некие "файлы-переходники" (Native Bridge File for a Java Library): ссылка1, ссылка2
    Для автоматического создания таких файлов имеются две утилиты:
    1. для создания бриджа для версий XE5 и XE6 можно использовать утилиту Java2Pas, но для неё не удается найти ключ;
    2. для версии XE7 используется утилита Java2OP, но её нигде не удается скачать.
    Есть ли у кого-нибудь ключ для Java2Pas или утилита Java2OP - пожалуйста, выложите в теме.
    Так же просьба, откликнуться тем кто владеет какой-нибудь информацией, которая может помочь в решении данного вопроса.

    Java2Pas.zip

×
×
  • Создать...