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

amok

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

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

  • Посещение

Активность репутации

  1. Thanks
    amok отреагировална ENERGY в [Статья][Android] AlarmManager - Автозапуск приложения в назначенное время   
    Фух. Наконец то проспался и понял как сделать.
    Нужно просто поставить Alarm еще раз, напр. чтобы выполнился через 3 секунды.  (неудобный, есть вероятность попасть на ошибку)
    просто вызвать его в Broadcast после Activity . (не всегда работает)
    Запустить Activity и в BroadcastReceiver подождать 8 секунд, а затем там же снять WakeLock. 
    Это вариант работает прекрасно.
    Также с этим кодом Alarm срабатывает если Activity уже запущено либо в фоне. Нужно перехватывать WillBecomeForeground, BecameActive и там включать экран. Процессор включается в WakeLock, но не на долго, вам нужно включить экран при помощи функции ниже, сделать работу затем отключить экран).
    В моем случае, в отдельном потоке крутиться самописный планировщик, для других задач, который возбуждает события, по нему я и включаю\отключаю экран.
     
    Итак выстраданный бесcонными ночами Java код, обратите внимание на  TestLauncher.putExtra("StartedFromAM", true), это чтобы знать из Activity что запустились из Broadcast (предложенный Blong'гом EXTRA_ALARM_COUNT с BroadcastReceiver всегда вернет ноль, он работает только если запускать напрямую Activity!) : 
    package com.TestReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.PowerManager; import android.os.Handler; public class AlarmReceiver extends BroadcastReceiver { private static PowerManager.WakeLock mWakeLock; @Override public void onReceive(Context context, Intent intent) { if (mWakeLock == null) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Delphi"); mWakeLock.acquire(); } Intent TestLauncher = new Intent(); TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity"); TestLauncher.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); // I TestLauncher.putExtra("StartedFromAM", true); context.startActivity(TestLauncher); // Handler h = new Handler(); h.postDelayed(new Runnable(){ public void run(){ mWakeLock.release(); mWakeLock = null; } }, 8000); //Toast.makeText(context, "Reelase! ("+mcounter.toString()+")", Toast.LENGTH_SHORT).show(); // For example } } PARTIAL_WAKE_LOCK означает что процессор во время выполнения этого кода, не будет уходить в спящий режим.
    Теперь в OnCreate нашей формы добавляем флаги чтобы включить экран, но при условии что  запустились мы из AlarmManager : 
    function StartedFromAlarmManager: boolean; begin {$IFDEF ANDROID}   Result := TAndroidHelper.Activity.getIntent.getBooleanExtra(StringToJString('StartedFromAM'), false);   // this will work only if using Activity instead of Broadcast - TJPendingIntent.JavaClass.getActivity:   //  Result := TAndroidHelper.Activity.getIntent.getIntExtra(TJIntent.JavaClass.EXTRA_ALARM_COUNT, 0); {$ELSE}   Result := false; {$ENDIF} end;  
    {$IFDEF ANDROID}   procedure TurnOnAndKeepScreenAndroid(aEnable: boolean);   var     vFlags: integer;   begin     vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or         TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or         TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or         TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON;     if aEnable then     begin       CallInUIThread (   // uses FMX.Helpers.Android       procedure       begin         TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags);       end );     end     else       CallInUIThread (       procedure       begin         TAndroidHelper.Activity.getWindow.clearFlags (vFlags);       end );   end;   {$ENDIF} И сразу же отключаем наш WakeLock устанавливая второй раз Alarmmanager на срабатывание через 3 сек (соответственно запуститься BroadcastReceiver и освободит WakeLock).   (уже отключается сам в Broadcast сразу после старта Activity)- т.к. во флагах окна, уже указан FLAG_KEEP_SCREEN - это будет держать экран и систему включенной. 
    Не забудьте  поставить разрешение WAKE LOCK = true!
     
     
     
     
  2. Like
    amok отреагировална haword в [Обзор] #3 ModernListView - динамическая подгрузка контента   
    в принципе это обычная практика когда меняешь стандартные компоненты, складывать модули которые не могут собраться рядом с измененным исходником. то есть ругается на Fmx.Bind.Editors берешь его и кидаешь рядом с FMX.ListView.pas, и так далее. 
  3. Like
    amok отреагировална Равиль Зарипов (ZuBy) в ListView Color Helper   
    добавление Item'ов
    for I := 0 to 20 do begin AItem := ListView1.Items.Add; with AItem do begin Text := 'Item Random ' + I.ToString; Detail := 'Detail for ' + Text; ButtonText := 'Custom Color'; Bitmap := Image1.Bitmap; end; ListView1.Adapter.ResetView(AItem); // fix TextButton ( TListViewTextButtonFix ) end; устраняем багу
    procedure TForm1.ListView1UpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin TListViewTextButtonFix.Rendering(Sender, AItem, AHandled); // fix end; FMX.ListView.TextButtonFix.zip
  4. Like
    amok отреагировална Равиль Зарипов (ZuBy) в ListView Color Helper   
    версия для берлина
    Раскраска ListView Кастомный цвет для определенного Item'a Отступы для разделителей  Определение Index'a верхнего Item'a Кол-во видимых элементов Показано как можно реализовать интерфейс день/ночь
    ModernListView.rar
     
  5. Like
    amok отреагировална Равиль Зарипов (ZuBy) в ListView Color Helper   
    версия для Seatle ColorListView.zip
     
    весь код для отрисовки кастомного цвета 
    1) копируем себе и открываем FMX.ListView
    2) Ctrl+F -> DrawItemsFill
    3) Вставляем код
    // отрисовываем кастомный цвет........................................... // procedure TListViewBase.DrawItemsFill(const StartItem................. if TListViewItem(ListItem).Data['aUseCustomColor'].AsBoolean then FBrush.Color := TListViewItem(ListItem).Data['aCustomColor'].AsInteger; // ...................................................................... после
    if FAlternatingColors and (AltIndex mod 2 = 1) then   FBrush.Color := FItemStyleFillAltColor; 4) Подключаем в своём проекте после стандартного FMX.ListView
  6. Like
    amok отреагировална Равиль Зарипов (ZuBy) в ListView Color Helper   
    Привет Всем!
    Много тем на форуме про раскраску TListView, нашел в интернете решение и доработал его
    Вот что получилось
       
    LV_Helper.zip                                                                  ColorListView.zip
    Доступно для Seattle
    ListView1.SetColorItemSelected(TAlphaColorRec.Orangered); //выделенный ListView1.SetColorItemFill(TAlphaColorRec.Gray); // обычный цвет Item ListView1.SetColorItemFillAlt(TAlphaColorRec.Lightgrey); // альтернативный цвет Item ListView1.SetColorBackground(TAlphaColorRec.Black); // цвет самого TListView ListView1.SetColorItemSeparator(TAlphaColorRec.Lightgray); // Линия разделения Item'ов ListView1.SetColorText(TAlphaColorRec.Red); // Обычный текст ListView1.SetColorTextSelected(TAlphaColorRec.White); // выделенный текст ListView1.SetColorTextDetail(TAlphaColorRec.Yellow); // текст доп. инфы ListView1.SetColorTextHeader(TAlphaColorRec.Green); // текст заголовка ListView1.SetColorTextHeaderShadow(TAlphaColorRec.Lightgray); // тень текста   ListView1.SetColorButtonText(TAlphaColorRec.Orange); // цвет текста кнопки   ListView1.SetColorButtonTextPressed(TAlphaColorRec.Orangered); // цвет нажатой кнопки добавлено в Berlin
    ListView1.SetColorPullRefresh(TAlphaColorRec.Orange); ListView1.SetColorPullRefreshIndicator(TAlphaColorRec.Orangered); ListView1.SetColorStretchGlow(TAlphaColorRec.Lime); ModernListView.rar
×
×
  • Создать...