GPS service for android and suggested changes in Necessitas.
BogDan
bog_dan_ro at yahoo.com
Mon Jun 6 12:01:25 CEST 2011
Hi,
Very soon, I'll push some commits which will make necessitas developers life easier (especially QtMobility developers), is about "use local libs" option.
Cheers,
BogDan.
----- Original Message -----
> From: Frameworks <frameworks at qlands.com>
> To: "necessitas-devel at kde.org" <necessitas-devel at kde.org>
> Cc:
> Sent: Monday, June 6, 2011 12:49 PM
> Subject: Re: GPS service for android and suggested changes in Necessitas.
>
> Sorry..
>
> I did not see the soname commit.
>
> Thanks.
>
> On 06/06/2011 12:45 PM, Frameworks wrote:
>> Hi,
>>
>> On more thing? How the load library problem gets fixed in Experimental?
>>
>> Thanks,
>> Carlos.
>>
>> On 06/02/2011 03:10 PM, Frameworks wrote:
>>> Hi,
>>>
>>> No problem.
>>>
>>> I am working on the GPS mobility plug-in (giving that there is a way
>>> of having the JObject of the current activity running the QT
>>> application).
>>>
>>> Cheers,
>>> Carlos.
>>>
>>> On 06/01/2011 09:53 PM, BogDan wrote:
>>>> Hi,
>>>>
>>>>
>>>> Please accept my apologize for slow replay.
>>>>
>>>>> ________________________________
>>>>> From:
> "frameworks at qlands.com"<frameworks at qlands.com>
>>>>> To: necessitas-devel at kde.org
>>>>> Sent: Sunday, May 29, 2011 10:58 AM
>>>>> Subject: GPS service for android and suggested changes in
> Necessitas.
>>>>>
>>>>>
>>>>>
>>>>> Hi,
>>>>>
>>>>>
>>>>>
>>>>> First of all. Thanks for the brilliant work!.... Running QT in
>>>>> Android is just mind-blowing!
>>>>>
>>>>>
>>>>> I just joined the list of developers to contribute to the
> project.
>>>>> Just after I got a copy of Necessitas 0.1 I had to see how to
> make
>>>>> the GPS work. I wanted to implement it as most as possible with
> JNI
>>>>> and with the minimum of java code.
>>>> Great, we have something in common :)
>>>>
>>>>
>>>>> From a GPS example written in Java
>>>>> (http://hejp.co.uk/android/android-gps-example/) I got that the
>
>>>>> main challenges were:
>>>>> 1- To implement the LocationListener interface
>>>>> 2- To connect to the location manager by
>>>>> Activity.getSystemService(service)
>>>>> 3- To request the locations using the Listener by
>>>>> LocationManager.requestLocationUpdates(gps provider, double,
> float,
>>>>> listener,looper)
>>>>>
>>>>> This main challenges arose from two main constraints:
>>>>> 1- The LocationListener is an interface so needs to be
> implemented
>>>>> in a class in a very basic way. Thus I had to include such
>>>>> implementation as part of the industrius java classes:
>>>>> QtGPSListener.java with the following implementation:
>>>>>
>>>>> package eu.licentia.necessitas.industrius;
>>>>> import android.location.Location;
>>>>> import android.location.LocationListener;
>>>>> import android.location.LocationProvider;
>>>>> import android.os.Bundle;
>>>>> public class QtGPSListener implements LocationListener {
>>>>> public void onLocationChanged(Location location)
>>>>> {
>>>>> // Here we get the location data and create a
> result
>>>>> // string (A really basic way of passing
> data). We
>>>>> called sndonLocationChanged that is
>>>>> // in fact connected to the qt application by
>>>>> JNI's registeNatives
>>>>> String accuracy;
>>>>> accuracy =
> String.valueOf(location.getAccuracy());
>>>>> String altitude;
>>>>> altitude =
> String.valueOf(location.getAltitude());
>>>>> String latitude;
>>>>> latitude =
> String.valueOf(location.getLatitude());
>>>>> String longitude;
>>>>> longitude =
> String.valueOf(location.getLongitude());
>>>>> String res;
>>>>> res = "|AC:" + accuracy;
>>>>> res = res + "|AL:" + altitude;
>>>>> res = res + "|LA:" + latitude;
>>>>> res = res + "|LO:" + longitude +
> "|";
>>>>> sndonLocationChanged(res);
>>>>> }
>>>>> public void onProviderDisabled(String provider)
> {
>>>>> String res;
>>>>> res = "Provider " + provider + " is
> disabled";
>>>>> sndonProviderDisabled(res);
>>>>> }
>>>>> public void onProviderEnabled(String provider)
> {
>>>>> String res;
>>>>> res = "Provider " + provider + " is
> enabled";
>>>>> sndonProviderEnabled(res);
>>>>> }
>>>>> public void onStatusChanged(String provider, int
>>>>> status, Bundle extras) {
>>>>> switch (status) {
>>>>> case LocationProvider.OUT_OF_SERVICE:
>>>>> sndonStatusChanged("Status Changed: Out of
> Service");
>>>>> break;
>>>>> case LocationProvider.TEMPORARILY_UNAVAILABLE:
>>>>> sndonStatusChanged("Status Changed:
> Temporarily
>>>>> Unavailable");
>>>>> break;
>>>>> case LocationProvider.AVAILABLE:
>>>>> sndonStatusChanged("Status Changed:
> Available");
>>>>> break;
>>>>> }
>>>>> }
>>>>> // List of methods that will be linked in the qt
> application
>>>>> // using JNI's registerNatives
>>>>> public static native void sndonLocationChanged(String
>>>>> currLocation);
>>>>> public static native void sndonProviderDisabled(String
>
>>>>> message);
>>>>> public static native void sndonProviderEnabled(String
>>>>> message);
>>>>> public static native void sndonStatusChanged(String
> message);
>>>>> }
>>>>>
>>>>> 2- I had to use the activity running the qt application so I
> can
>>>>> use getSystemService(String). I though there were some Android
> API
>>>>> to get an instance to the current activity running (so I can
> use
>>>>> JNI to get it) but it seems that there is none.
>>>> Actually it is, QtApplication.mainActivity()
>>>>
>>>>
>>>>> So the only alternative that I had was to pass the activity
> from
>>>>> QtApplication.java to qtmain_android.cpp. For this I made the
>>>>> following changes:
>>>>> 2.1 - In QtApplication.java: FROM: public static native
> void
>>>>> startQtApp(String params,String env) TO: public static native
> void
>>>>> startQtApp(String params,String env,Object currAct)
>>>>> 2.2 - In qtmain_android.cpp: FROM: static jboolean
>>>>> startQtApp(JNIEnv* env, jobject /*object*/, jstring
> paramsString,
>>>>> jstring environmentString) TO: tatic jboolean
> startQtApp(JNIEnv*
>>>>> env, jobject /*object*/, jstring paramsString, jstring
>>>>> environmentString,jobject currAct)
>>>>> 2.3 - In qtmain_android.cpp: I created a jobject currActivity
> =
>>>>> NULL that I can extern in my sample application. Plus assigning
> it
>>>>> a global reference of the current activity: currActivity =
>>>>> env->NewGlobalRef(currAct). This to use it in JNI thread of
> execution
>>>>>
>>>> Hmm :)
>>>>
>>>>
>>>>> With this changes I create a QT GPS class with JNI code that
> access
>>>>> the GPS. I just need to pass it the JavaVM that I extern from
>>>>> qtmain_android.cpp and currActivity.
>>>>>
>>>>>
>>>>> I can see that in 0.2 necessitas include QtLocation.java
> (which
>>>>> implements the GPS). Although it is fine, I reckon it is better
> to
>>>>> implement much of that code in the c++ side with JNI and only
> have
>>>>> the minimum java code just for implementing interfaces for
> example.
>>>>>
>>>> Agree with you !
>>>>
>>>>
>>>>> This is an snapshot of the QT GPS class where it connects to
> the
>>>>> service
>>>>>
>>>>>
>>>> [...]
>>>>
>>>>> To conclude. A JNI implementation of the Android GPS service
> with
>>>>> very basic java code will require to have a Jobject pointing to
> the
>>>>> current activity running the QT application.
>>>> Please call QtApplication.mainActivity() to get it !
>>>>
>>>>
>>>>> This I reckon would make a Mobility plugin less dependent on
>>>>> external java coding.
>>>> It will be great, because the java part can't be updated, by
>>>> Ministro service !
>>>>
>>>>
>>>>> But where it would be the best place to implement this change?
> I
>>>>> made it on qtmain_android.cpp and qtApplication.java but for a
>
>>>>> Mobility plugin this might not be the case.
>>>>>
>>>> Please change current Mobility implementation ! You'll get
> Java_vm
>>>> pointer when the plugin is loaded by application and
>>>> QtApplication.mainActivity() is a static function which can be used
>
>>>> to get current activity.
>>>>
>>>>
>>>>> I register myself on gitorious. For contributing do I need to
> work
>>>>> on a clone of master?
>>>>>
>>>> Please clone
>>>> http://qt.gitorious.org/~taipan/qt-mobility/android-qt-mobility and
>
>>>> use testing branch !
>>>>
>>>>
>>>>>
>>>>> Thanks a lot for the brilliant work!
>>>>>
>>>>>
>>>>>
>>>> Thanks,
>>>>
>>>> I'm looking forward to hearing from you
>>>>
>>>> Cheers,
>>>> BogDan.
>>>>
>>>>
>>>> Again, sorry for slow replay.
>>>>
>>>>
>>>
>>
>
> _______________________________________________
> Necessitas-devel mailing list
> Necessitas-devel at kde.org
> https://mail.kde.org/mailman/listinfo/necessitas-devel
>
More information about the Necessitas-devel
mailing list