2015-03-11 2 views
0

Я пытаюсь прочитать UID с карты nfc на Android с помощью Qt. aOn one hand, После некоторого исследования я нашел this класс в Java для чтения. С другой стороны, я прочитал документацию Qt, как вызвать и статический объект из Java, используя QAndroidJniObject::callStaticObjectMethod, но я понятия не имею, как создать активность с помощью модуля Qt AndroidExtras и сообщить об этом при запуске нового Intent.Реализация NFC на Android с использованием Qt

Есть ли у кого-нибудь советы, чтобы заставить его работать? Спасибо заранее,

ответ

1

Обновление: Включая информацию о наоборот

По сравнению с вызывающей Java от C/C++ код, вызывающий код C от Java довольно прост, андроид NDK включает в себя несколько полезных примеров в простейшим из которых является hello ndk, все можно открыть в eclipse, но обратите внимание, что вам нужно сначала построить jni-часть с ndk-build. Ключевая часть - это правильное название, я следовал http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/, когда я начинал, Android NDK tutorial/guide for beginners. имеет несколько других руководств по началу работы.

Основные части являются следующие

  1. создать Java активность, вы можете наследовать QtActivity согласно библиотеке уведомлений.

  2. Загрузите библиотеку (Qt, вероятно, обрабатывать этот шаг для вас) оставь в preciding LIB и замыкающие .so поэтому для libstuff.so сделать, как показано ниже

    // load the library - name matches jni/Android.mk 
    static { 
        System.loadLibrary("stuff"); 
    } 
    
  3. Объявите вашу функцию C от Java (убедитесь, что имя такое же, как все, что у вас есть в вашем файле .c сделать это за пределами любых классов

    private native String myCFunction(); 
    
  4. Где-то в вашем Java кода вызова на myCFunction();

    String something = myCFunction(); 
    

Существует Qt Пример, который делает именно это с достаточной документацией http://doc.qt.io/qt-5/qtandroidextras-notification-example.html

Вместо того вызова Java NFC API непосредственно из Qt вы можете написать функцию обертку в Java и называют, что из ваше приложение на C++. Вам также может быть проще вызвать метод C++ из java с результатом, особенно если библиотека NFC не возвращает результат imediatly.

Oracle имеет обзор JNI и документацию на там вебсайте http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/intro.html#wp725

+0

Спасибо за Ваш ответ! Я уже проверил этот пример. Проблема, которую я обнаружил, в этом примере показывает, как связать сигнал C++ с слотом Java. Для NFC нам нужно просто противоположное. Что касается последней части вашего комментария, я планирую прочитать uid из функции ByteArrayToHexString (byte [] inarray), которая вызывается при обнаружении новой карты ... единственная недостающая часть - это как реализовать своего рода функция onByteArrayToHexString. – albertTaberner

+0

Поместите несколько лучших ссылок и описание другого пути для вас, к сожалению, я не в работе atm и не могу просто дважды проверить свой код – simotek

+0

Большое спасибо за подробное обновление. Я собираюсь установить студию Android и попробовать. Я также нашел это сообщение (http://www.gnuton.org/blog/2014/01/invoking-qtc-code-from-the-java-side-of-qt-for-android-application/), где он объяснил, как скомпилировать java-код для использования на стороне C++. – albertTaberner

Смежные вопросы