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

Как узнать какие заголовочные файлы нужны?


Kamenev_D

Вопрос

Добрый день. Решил вот так же осваивать FM, и вот тут же сразу возникло пару вопросов, касающихся разработки под Андроид.

Итак по порядку:

Есть примеру код на Делфи:

uses
  FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.Provider, Androidapi.JNI.JavaTypes; 

cursor: JCursor;
cursor := SharedActivity.getContentResolver.query(
   TJCallLog_Calls.JavaClass.CONTENT_URI, nil, nil, nil, nil);

Переводим его в Си

 #include <Androidapi.Helpers.hpp>
//#include <FMX.Helpers.Android.hpp>
#include <Androidapi.JNI.GraphicsContentViewText.hpp>
#include <Androidapi.JNI.Provider.hpp>

JCursor *cursor;
TJCallLog_Calls *call;

cursor = SharedActivity()->getContentResolver()->query(call->JavaClass->CONTENT_URI, NULL,NULL,NULL,NULL )   ;

Так вот вопрос, где можно почитать за данные заголовочные файлы? Как вообще узнали что нужно вызывать? Я так понял это Android API, но если читать, за данные методы, то нигде не указано какие хидеры нужно подключать. Вот к примеру SharedActivity. Что это, за что отвечает, аналог чего?  Вот например описание, но где указано какой хидер нужно подключать то? В общем прощу помощи в данном вопросе.

 

Если создал не в том разделе, прощу перенести в соответствующий.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы

Добрый день,

  1. SharedActivity - это вспомогательная функция, введенная в FMX для удобного доступа к экземпляру активити.
  2. На счет алгоритма поиска соответствующего заголовочного файла - правил нету. Так как, зависимости модулей в Delphi отличаются от механизма пакетов Java. Поэтому в Delphi физически не получится сделать такое же соответствие названий юнитов, как в Java - пакеты. Поэтому пользуйтесь поиском по заголовочным файлам C++ Builder для поиска. 

P.S. Здесь представлены правила трансляции классов в делфовые юниты (Актуально для XE7):

  • Ветка Unit - содержит название юнита (хедера), внутренние ветки типы из Android API, которые будут помещены в этот юнит.
    <units>
        <unit name="Androidapi.JNI.VideoView">
            <class name="android.widget.VideoView" />
            <class name="android.widget.MediaController$MediaPlayerControl" />
            <class name="android.widget.MediaController" />
        </unit>
        
        <unit name="Androidapi.JNI.Java.Security">
            <class name="java.security.*" />
        </unit>

        <unit name="Androidapi.JNI.JavaTypes">
            <class name="java*" />
            <class name="org*" />
        </unit>

        <unit name="Androidapi.JNI.GraphicsContentViewText">
            <class name="android.graphics*" />
            <class name="android.content*" />
            <class name="android.view*" />
            <class name="android.text*" />
            <class name="android.database*" />
        </unit>

        <unit name="Androidapi.JNI.Os">
            <class name="android.os*" />
        </unit>

        <unit name="Androidapi.JNI.Webkit">
            <class name="android.webkit*" />
        </unit>

        <unit name="Androidapi.JNI.Telephony">
            <class name="android.telephony*" />
        </unit>
        
        <unit name="Androidapi.JNI.Location">
            <class name="android.location*" />
        </unit>
        
        <unit name="Androidapi.JNI.App">
            <class name="android.app*" />
        </unit>
        
        <unit name="Androidapi.JNI.Widget">
            <class name="android.widget*" />
        </unit>
        
        <unit name="Androidapi.JNI.Util">
            <class name="android.util*" />
        </unit>
        
        <unit name="Androidapi.JNI.Media">
            <class name="android.media*" />
        </unit>
        
        <unit name="Androidapi.JNI.Provider">
            <class name="android.provider*" />
        </unit>
        
        <unit name="Androidapi.JNI.Support">
            <class name="android.support*" />
        </unit>
        
        <unit name="Androidapi.JNI.Net">
            <class name="android.net*" />
        </unit>
        
        <unit name="Androidapi.JNI.Dalvik">
            <class name="dalvik*" />
        </unit>

        <unit name="Androidapi.JNI.Hardware">
            <class name="android.hardware*" />
        </unit>

        <unit name="Androidapi.JNI.InputMethodService">
            <class name="android.inputmethodservice*" />
        </unit>

        <unit name="Androidapi.JNI.Embarcadero">
            <class name="com.embarcadero.firemonkey*" />
        </unit>

        <unit name="Androidapi.JNI.OpenGL">
            <class name="android.opengl*" />
        </unit>
        
        <unit name="Androidapi.JNI.AdMob">
            <class name="com.google.android.gms.ads.*" />
        </unit>

        <unit name="Androidapi.JNI.PlayServices">
            <class name="com.google.android.gms*" />
        </unit>
        
        <unit name="Androidapi.JNI.PlayServices.GCM">
            <class name="com.embarcadero.gcm*" />
        </unit>

        <unit name="Androidapi.JNI.Analytics">
            <class name="com.google.analytics*" />
        </unit>

        <unit name="Androidapi.JNI.ApkExpansion">
        	<class name="com.android.vending.expansion*" />
        	<class name="com.google.android.vending.expansion*" />
        	<class name="com.embarcadero.expansion*" />
        </unit>

        <unit name="Androidapi.JNI.Licensing">
        	<class name="com.google.android.vending.licensing*" />
        </unit>
        
        <unit name="Androidapi.JNI.InAppBilling">
            <class name="com.android.vending.billing.*" />
        </unit>

		<unit name="Androidapi.JNI.Print">
            <class name="android.print*" />
        </unit>
        
		<unit name="Androidapi.JNI.Bluetooth">
            <class name="android.bluetooth.*" />
        </unit>
        
    </units>

Ссылка на комментарий
  • 0

Спасибо, за ответ. А где можно узнать поподробнее за JCursor, TJCallLog_Calls,SharedActivity и иже с ними? Т.е что это, чего аналоги?

А то как можно что-то делать не понимаю что же используешь. Чем к примеру отличается JCursor от просто TCursor? И для чего он? Это как указатель мыши выступает или как какая то переменная? Вот что непонятно. И инфы нету никакой. Покрайней мере я не нашёл ничего. Но автор кода откуда то узнал за него же.

Ссылка на комментарий
  • 0
  • Администраторы

Все типы начинающиеся с буквы "J" - это соответствующие типы Android API.

 

Смотрите developer.android.com

 

Правила трансляции Android API название в Delphi названия:

  1. Добавить приставку "J" к типу.
    Например: Cursor (В Android API) -> JCursor (В Delphi)
  2. Если тип вложенный в другой тип, то вставить разделитель "_" между родительским типом и вложенным. 
    Например: CallLog.Calls (В Android API) -> JCallLog_Calls (В Delphi)

Аналогично в обратную сторону

Ссылка на комментарий
  • 0

Вот это да! Даже слов нету. Спасибо! Если я правильно понял, то если в коде Ява встречается к примеру "android.bluetooth.*", то в Эбмаркадеро можно смело подключать Androidapi.JNI.Bluetooth? И последний вопрос, можно прямую ссылку на правила трансляции? Или это какаят о личная? В общем в любом случае огромнейшее спасибо за помощь!

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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