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

Рагим

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

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

  • Посещение

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

    1

Сообщения, опубликованные Рагим

  1. Доброго времени суток. Пишу мобильное приложение на Delphi Berlin. Добавил вибрацию при нажатии на кнопку. На Андроид 4.4.2 все работает нормально, на Андроид 6 при нажатии на кнопку приложение вылетает. Проблема точно в вибрации, так как при отсутствии вибрации все работает нормально. В качестве процедуры вибрации использую следующий код:

    procedure Vibr;
    //Процедура вибрации
    var
      VibratorObj: JObject;
      Vibrator: JVibrator;
    begin
      VibratorObj := SharedActivity.getSystemService(TJActivity.JavaClass.VIBRATOR_SERVICE);
      Vibrator := TJVibrator.Wrap((VibratorObj as ILocalObject).GetObjectID);
      if Vibrator.hasVibrator() then
        Vibrator.vibrate(200);
    end;

     

    Как по Вашему, в чем может быть причина?

  2. Добрый день. Решил сегодня сделать некоторые доработки в приложение написанное на XE7 под Андроид и столкнулся со следующей проблемой: приложение не получает информацию через связку TIdTCPClient/TIdTCPServer. До этого все работало.

    Отправляю сообщение с компьютера через TIdTCPClient:

    try
        form2.IdTCPClient1.Connect;
        form2.IdTCPClient1.IOHandler.WriteLn(ss,enUTF8);
        form2.IdTCPClient1.Disconnect;
       except
         showmessage('Error');
         end;
        end;//try

    получаю (вернее не получаю) на телефоне под Андроид:

    procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
    begin
     l := AContext.Connection.IOHandler.ReadLn(enUTF8);
     showmessage(l);
    end;

     

    В чем может быть проблема и как решить?

  3. 11 часов назад, kami сказал:

    нет. Отправляете как broadcast, т.е. на адрес 255.255.255.255 - пакет улетит всем, до кого в принципе сможет дойти в пределах локалки. С Indy - не подскажу, в Win с ними не работаю, а на мобильных платформах мне хватает http.

    Спасибо за совет. Сделал следующим образом:

    Кинул на сервер TIdUDPClient. Поставил кнопку и при нажатии отрабатывает

    form2.IdUDPClient1.Active:=true;
    form2.IdUDPClient1.BroadcastEnabled:=true;
    form2.IdUDPClient1.Broadcast(ServerIP,8090);
    form2.IdUDPClient1.Active:=false;
    form2.IdUDPClient1.BroadcastEnabled:=false;

     

    На клиенте TIdUDPServer. 

    var
      DataStringStream: TStringStream;
      ServIP: String;
    begin
      DataStringStream := TStringStream.Create('');
      try
        DataStringStream.CopyFrom(AData, AData.Size);
        ServIP := DataStringStream.DataString;
      finally
        DataStringStream.Free;
      end;
      ShowMessage(ServIP);

     

  4. Доброго времени суток.

    Есть приложение на Windows (сервер) и есть от 1 до 4 приложений (клиенты) на Андроид. Все устройства в сети. IP адреса клиентов не известны серверу, а адрес сервера клиентам. Приложения после того как узнают адреса друг друга, будут обмениваться сообщениями через TIdTcpClient и TIdTcpServer. 

    Как лучше реализовать распознавание клиентов в сети? Делаю сейчас используя Tethering, но способ мне не нравится.

  5. Доброго времени суток.

     

    Есть приложение которое на некоторые действия пользователей отвечает звонком. Приложение живет со времени Delphi 7. Для воспроизведения звука использую такую процедуру:

     

    Procedure Tform1.PlayRing;
    var s:string;
    begin
     s := 'ringin.wav';
     if FileExists(s) then
      begin
      form1.MediaPlayer1.Stop;
      form1.MediaPlayer1.Clear;
      form1.MediaPlayer1.FileName:=s;
      form1.MediaPlayer1.Play;
      end
      else showmessage('Error 104: File not found: '+s);
     
     
    end;
     
    Звук воспроизводится нормально 50-60 раз. Потом либо выскакивает ошибка: Unsupported media file ringin.wav, либо приложение подвисает. Проблема появилась после перехода с VCL на FMX.
  6. Доброго времени суток.

     

    Столкнулся со следующей проблемой: есть два приложения на Андроид. Подключаются друг к другу через Tethering. Когда оба телефона подключены к одной сети, все работает без проблем. Если на одном из телефонов создать точку доступа и подключить второй к этой сети, то они не подключаются друг к другу через Tethering. В чем может быть проблема?

  7. Вот рабочий вариант. 

    
    
    procedure TForm1.ShowPlus(a, b: byte);
    // a - Номер строки
    // b - Цвет команды
    begin
     case a of
      1: begin
          form1.PlusGlyph1.ImageIndex:=b-1;
          form1.MinusGlyph1.ImageIndex:=b+3;
         end;
     
      2: begin
          form1.PlusGlyph2.ImageIndex:=b-1;
          form1.MinusGlyph2.ImageIndex:=b+3;
         end;
     
      3: begin
          form1.PlusGlyph3.ImageIndex:=b-1;
          form1.MinusGlyph3.ImageIndex:=b+3;
         end;
     
      4: begin
          form1.PlusGlyph4.ImageIndex:=b-1;
          form1.MinusGlyph4.ImageIndex:=b+3;
         end;
     end;
    end;
  8. Проблема с прорисовкой в Image так и не решил. Сделал по-другому. Загрузиk все изображения в TImageList и стал оттуда подгужать в TGlyph. Проблема устранена. Проблему устранил, но точно не знаю почему не работало. Возможно потому что одновременно с прорисовкой еще идет отправка/получение сообщений на другие устройства и прорисовка происходит не в основном потоке. Поблуждав по просторам форума понял что у Image такое иногда бывает (проблемы с прорисовкой не в основном потоке).

  9. первое что пришло в голову, проверить есть ли эти картинки на местах

     

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

    procedure TForm1.ShowPlus(a, b: byte);
    // a - Номер строки
    // b - Цвет команды
    const
      cPlusName: array [1 .. 4] of string = ('bplus.png', 'yplus.png', 'gplus.png', 'rplus.png');
      cMinusName: array [1 .. 4] of string = ('bminus.png', 'yminus.png', 'gminus.png', 'rminus.png');
    var
      sPlusName: string;
      sMinusName: string;
    
      iPlusImg: TImage;
      iMinusImg: TImage;
    begin
      sPlusName := TPath.GetDocumentsPath + PathDelim + cPlusName[b];
      sMinusName := TPath.GetDocumentsPath + PathDelim + cMinusName[b];
      case a of
        1:
          begin
            iPlusImg := form1.PlusImage1;
            iMinusImg := form1.MinusImage1;
          end;
        2:
          begin
            iPlusImg := form1.PlusImage2;
            iMinusImg := form1.MinusImage2;
          end;
        3:
          begin
            iPlusImg := form1.PlusImage3;
            iMinusImg := form1.MinusImage3;
          end;
        4:
          begin
            iPlusImg := form1.PlusImage4;
            iMinusImg := form1.MinusImage4;
          end;
      end;
      iPlusImg.Bitmap.LoadFromFile(sPlusName);
      iMinusImg.Bitmap.LoadFromFile(sMinusName);
    end;
    

    писал на форуме, так что подправите если будут ошибки

    Не помогло. Все равно изображения не отображаются. Свойство Visible у них равно false, т.е. сначала загружаю файлы с изображением, а затем только показываю. Попробовал отображать перед загрузкой - отображается первая пара, от второй пары отображается только кнопка минус и то не с загруженным в рантайм изображением, а с тем что я загрузил в дизайне.

  10. Добрый день.

     

    Столкнулся с проблемой. Приложение изначально писал на XE6, потом перенес на XE7 - все работало без проблем. Обновился до XE8 и код перестал работать. Причем никаких ошибок не выкидывает. Просто зависает не отрабатывает процедура. Прошу не бить ногами за дилетантский код. Главное до этого нормально работал. Суть такая: есть два приложения под Андроид. Связаны между собой по сети. Назовем их сервер и клиент (вернее 4 клиента). Одно из них посылает сообщение на другой и при получении сообщения должна отрабатывать эта процедура. Взависимости от того кто и когда послал сообщение, появляются разные картинки. 

     

    procedure TForm1.ShowPlus(a,b:byte);
    //a - Номер строки
    //b - Цвет команды
    begin
     but[a]:=b;
     case a of
      1: begin
          case b of
           1: begin
               form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');
               form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');
              end;
    
    
           2: begin
               form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');
               form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');
              end;
    
    
           3: begin
               form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');
               form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');
              end;
    
    
           4: begin
               form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');
               form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');
              end;
          end;
    
    
         end;
    
    
      2: begin
          case b of
           1: begin
               form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');
               form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');
              end;
    
    
           2: begin
               form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');
               form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');
              end;
    
    
           3: begin
               form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');
               form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');
              end;
    
    
           4: begin
               form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');
               form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');
              end;
          end;
    
    
         end;
    
    
      3: begin
          case b of
           1: begin
               form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');
               form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');
              end;
    
    
           2: begin
               form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');
               form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');
              end;
    
    
           3: begin
               form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');
               form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');
              end;
    
    
           4: begin
               form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');
               form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');
              end;
          end;
    
    
         end;
    
    
      4: begin
          case b of
           1: begin
               form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');
               form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');
              end;
    
    
           2: begin
               form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');
               form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');
              end;
    
    
           3: begin
               form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');
               form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');
              end;
    
    
           4: begin
               form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');
               form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');
              end;
          end;
         end;
     end;
    end;

     

    Буду рад любой помощи в исправлении ошибок или оптимизации кода.

  11. Добрый день.

     

    Есть необходимость создать из приложения под Андроид точку доступа на телефоне. После этого получить список IP-адресов подключенных устройств. Если кто-то знает каким образом можно это реализовать, пожалуйста помогите.

  12. Добрый день. Пишу приложение на Delphi XE7 под Андроид. Код типа 

     

    if Key = vkHardwareBack then
    begin
    // Do whatever you want to do here
    Key := 0; // Set Key = 0 if you want to prevent the default action
    end;

     

    отлично работал в XE6 и перестал работать после обновления. Приложение выполняет все что находится до строки Key:=0, а потом закрывается. Причем не закрывает подключения TIdTCPServer? в результате чего не выгружается полностью. Вышеуказанный код надо использовать как при выходе из приложения, так и при переходе из формы в форму. В чем по вашему мнению может быть проблема?

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