android - Qt5.2.1 get GPS location on Samsung Galaxy S2Plus (I9105P) -
i trying gps coordinates using qt5.2.1 on samsung galaxy s2 plus. tried:
- calling qgeopositioninfosource::availablesources() returns empty list.
- i tried qgeopositioninfosource::createdefaultsource() , returns null pointer.
i have set permissions in androidmanifest.xml, qtcreator:
android.permission.access_coarse_location
android.permission.access_fine_location
i tried qnmeapositioninfosource class, have call setdevice() method setting qiodevice, don't know can device. there "/dev/bcm_gps" accessing nmea gps coordinates ?
note: trying on samsung galaxy s2 plus, cyanogenmode11 (android 4.4.2), baseband i9105pxxumbi, kernel 3.0.101. other gps applications works ok, it's not cyanogen bug.
here complete sources. it's minimal project getting gps coordinates , display them in textedit. don't i'm doing wrong.
here .pro file:
#------------------------------------------------- # # project created qtcreator 2014-02-05t15:48:22 # #------------------------------------------------- qt += core gui positioning sql greaterthan(qt_major_version, 4): qt += widgets target = test_position template = app sources += main.cpp\ mainwindow.cpp headers += mainwindow.h forms += mainwindow.ui config += mobility mobility += android_package_source_dir = $$pwd/android other_files += \ android/androidmanifest.xml
here main.cpp
#include "mainwindow.h" #include <qapplication> int main(int argc, char *argv[]) { qapplication a(argc, argv); mainwindow w; w.show(); return a.exec(); }
here trying location api:
#include "mainwindow.h" #include "ui_mainwindow.h" mainwindow::mainwindow(qwidget *parent) : qmainwindow(parent), ui(new ui::mainwindow) { ui->setupui(this); timer = new qtimer(this); timer->setsingleshot(true); connect(timer, signal(timeout()), this, slot(setupgps())); timer->start(1000); } void mainwindow::setupgps() { qstringlist services = qgeopositioninfosource::availablesources(); if (services.isempty()) { //services empty ui->textedit->settext("positioning sources unavailable"); timer->start(1000); return; } /**********************************gps trials***********************************/ // ui->textedit->settext("retry gps connection"); source = qgeopositioninfosource::createdefaultsource(this); if(source){ //never enter here ui->textedit->settext("success"); source->setpreferredpositioningmethods(qgeopositioninfosource:: allpositioningmethods); connect(source, signal(positionupdated(qgeopositioninfo)), this, slot(positionupdated(qgeopositioninfo))); source->startupdates(); } else { nmealocation = new qnmeapositioninfosource(qnmeapositioninfosource:: realtimemode, this); // ui->textedit->settext("available sources = " + qstring::number( nmealocation->supportedpositioningmethods())); qiodevice* dev = nmealocation->device(); if(dev){ ui->textedit->settext("got device"); } else { ui->textedit->settext("failed device"); } // nmealocation->setdevice(); timer->start(1000); } } void mainwindow::errorpositioning(qgeopositioninfosource::error er){ ui->textedit->settext("error = " + qstring::number(er)); } void mainwindow::positionupdated(const qgeopositioninfo &info) { qstring latitude, longitude; latitude.setnum(info.coordinate().latitude()); longitude.setnum(info.coordinate().longitude()); ui->textedit->settext("position updated: " + latitude + " " + longitude); } mainwindow::~mainwindow() { delete ui; }
here header file:
#ifndef mainwindow_h #define mainwindow_h #include <qmainwindow> #include <qtpositioning/qgeoaddress> #include <qtpositioning/qgeoareamonitorinfo> #include <qtpositioning/qgeoareamonitorsource> #include <qtpositioning/qgeocircle> #include <qtpositioning/qgeocoordinate> #include <qtpositioning/qgeolocation> #include <qtpositioning/qgeopositioninfosource> #include <qtpositioning/qgeosatelliteinfosource> #include <qtpositioning/qnmeapositioninfosource> #include <qtimer> #include <qdebug> namespace ui { class mainwindow; } class mainwindow : public qmainwindow { q_object public: explicit mainwindow(qwidget *parent = 0); ~mainwindow(); private: qgeopositioninfosource *source; qtimer* timer; ui::mainwindow *ui; qnmeapositioninfosource *nmealocation; private slots: void setupgps(); void errorpositioning(qgeopositioninfosource::error er); void positionupdated(const qgeopositioninfo &info); };
#endif // mainwindow_h
and here android manifest:
<?xml version='1.0' encoding='utf-8'?> <manifest android:versioncode="1" xmlns:android="http://schemas.android.com/apk/res/android" android:installlocation="auto" android:versionname="1.0" package="org.qtproject.example"> <application android:label="@string/app_name" android:hardwareaccelerated="true" android:name="org.qtproject.qt5.android.bindings.qtapplication"> <activity android:label="@string/app_name" android:name="org.qtproject.qt5.android.bindings.qtactivity" android:configchanges="orientation|uimode|screenlayout|screensize |smallestscreensize|locale|fontscale|keyboard|keyboardhidden|navigation" android:screenorientation="unspecified"> <intent-filter> <action android:name="android.intent.action.main"/> <category android:name="android.intent.category.launcher"/> </intent-filter> <meta-data android:name="android.app.lib_name" android:value="-- %%insert_app_lib_name%% --"/> <meta-data android:resource="@array/qt_sources" android:name="android.app.qt_sources_resource_id"/> <meta-data android:name="android.app.repository" android:value="default"/> <meta-data android:resource="@array/qt_libs" android:name="android.app.qt_libs_resource_id"/> <meta-data android:resource="@array/bundled_libs" android:name="android.app.bundled_libs_resource_id"/> <!-- deploy qt libs part of package --> <meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%bundle_local_qt_libs%% --"/> <meta-data android:resource="@array/bundled_in_lib" android:name="android.app.bundled_in_lib_resource_id"/> <meta-data android:resource="@array/bundled_in_assets" android:name="android.app.bundled_in_assets_resource_id"/> <!-- run local libs --> <meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%use_local_qt_libs%% --"/> <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/> <meta-data android:name="android.app.load_local_libs" android:value="-- %%insert_local_libs%% --"/> <meta-data android:name="android.app.load_local_jars" android:value="-- %%insert_local_jars%% --"/> <meta-data android:name="android.app.static_init_classes" android:value="-- %%insert_init_classes%% --"/> <!-- messages maps --> <meta-data android:name="android.app.ministro_not_found_msg" android:value="@string/ministro_not_found_msg"/> <meta-data android:name="android.app.ministro_needed_msg" android:value="@string/ministro_needed_msg"/> <meta-data android:name="android.app.fatal_error_msg" android:value="@string/fatal_error_msg"/> <!-- messages maps --> <!-- splash screen --> <meta-data android:resource="@layout/splash" android:name="android.app.splash_screen"/> <!-- splash screen --> </activity> </application> <uses-sdk android:targetsdkversion="14" android:minsdkversion="9"/> <supports-screens android:anydensity="true" android:smallscreens="true" android:normalscreens="true" android:largescreens="true"/> <!-- %%insert_permissions --> <!-- %%insert_features --> <uses-permission android:name="android.permission.access_coarse_location"/> <uses-permission android:name="android.permission.access_fine_location"/> <uses-permission android:name="android.permission.internet"/> <uses-permission android:name="android.permission.write_external_storage"/> </manifest>
as can see here (middle of post), qt positioning module not yet implemented on android, alas. planned (not guaranteed) next qt version, 5.3, expected released around end of april 2014 (source).
Comments
Post a Comment