Thank you Pieter for the code snippet. I can also confirm that this workaround is needed for Samsung Spica, phone model GT-I5700 with android 1.5.
Johan On Fri, Nov 13, 2009 at 10:12 AM, Pieter <[email protected]> wrote: > Allright, I have taken up the gauntlet and wrote a subclass for > working around this bug. > It draws the "my location" disc and an accuracy circle. You can test > it on a device that is > not bugged by initializing the "bugged" variable to true. > > It is a quick and dirty hack but it seems to work correctly on my G1, > although the calculations > might be way off when you are near the poles ;-). I hope to have some > more feedback from an > actual Cliq user later today. > > You are free to use and adapt the source code as you see fit: > http://www.spectrekking.com/download/FixedMyLocationOverlay.java > > And the accompanying drawable: > http://www.spectrekking.com/download/mylocation.png > > I made the drawable orange instead of blue on purpose so users can see > when their device is bugged. > Note that there is no animation on GPS activity (as there is in the > original MyLocationOverlay). > > On a related note: it seems that the "Google logo" drawable is also > bugged on the Cliq as I get reports > of a "red square in the lower left where the Google logo is supposed > to be". I don't really see any > workaround for that one. > > If you find any problems with this solution, or have any improvements > to share please let us know! > > --------------- > package com.spectrekking.play; > > import android.content.Context; > import android.graphics.Canvas; > import android.graphics.Paint; > import android.graphics.Point; > import android.graphics.Paint.Style; > import android.graphics.drawable.Drawable; > import android.location.Location; > > import com.google.android.maps.GeoPoint; > import com.google.android.maps.MapView; > import com.google.android.maps.MyLocationOverlay; > import com.google.android.maps.Projection; > import com.spectrekking.R; > > public class FixedMyLocationOverlay extends MyLocationOverlay { > private boolean bugged = false; > > private Paint accuracyPaint; > private Point center; > private Point left; > private Drawable drawable; > private int width; > private int height; > > public FixedMyLocationOverlay(Context context, MapView mapView) { > super(context, mapView); > } > > �...@override > protected void drawMyLocation(Canvas canvas, MapView mapView, > Location lastFix, GeoPoint myLoc, long when) { > if (!bugged) { > try { > super.drawMyLocation(canvas, mapView, lastFix, > myLoc, when); > } catch (Exception e) { > bugged = true; > } > } > > if (bugged) { > if (drawable == null) { > accuracyPaint = new Paint(); > accuracyPaint.setAntiAlias(true); > accuracyPaint.setStrokeWidth(2.0f); > > drawable = > mapView.getContext().getResources().getDrawable > (R.drawable.mylocation); > width = drawable.getIntrinsicWidth(); > height = drawable.getIntrinsicHeight(); > center = new Point(); > left = new Point(); > } > Projection projection = mapView.getProjection(); > > double latitude = lastFix.getLatitude(); > double longitude = lastFix.getLongitude(); > float accuracy = lastFix.getAccuracy(); > > float[] result = new float[1]; > > Location.distanceBetween(latitude, longitude, > latitude, longitude + > 1, result); > float longitudeLineDistance = result[0]; > > GeoPoint leftGeo = new GeoPoint((int)(latitude*1e6), > (int) > ((longitude-accuracy/longitudeLineDistance)*1e6)); > projection.toPixels(leftGeo, left); > projection.toPixels(myLoc, center); > int radius = center.x - left.x; > > accuracyPaint.setColor(0xff6666ff); > accuracyPaint.setStyle(Style.STROKE); > canvas.drawCircle(center.x, center.y, radius, > accuracyPaint); > > accuracyPaint.setColor(0x186666ff); > accuracyPaint.setStyle(Style.FILL); > canvas.drawCircle(center.x, center.y, radius, > accuracyPaint); > > drawable.setBounds(center.x - width / 2, center.y - > height / 2, > center.x + width / 2, center.y + height / 2); > drawable.draw(canvas); > } > } > } > --------------- > On Nov 12, 10:57 pm, TreKing <[email protected]> wrote: >> Yeah, it's better than a force-close, that's for sure. >> >> Though getting the pixel radius for the circle shouldn't be too hard. With >> the GPS accuracy value you can get a latitude / longitude value that's an >> offset from the current estimated location, map those two points to screen >> space with the MapView projection, and you have the circle radius in pixels >> as the difference. >> >> I'll give it a shot when I get around to putting in this stop-gap for the >> Cliq and post back with what I find. >> >> TreKing - Chicago transit tracking app for Android-powered >> deviceshttp://sites.google.com/site/rezmobileapps/treking >> >> >> >> On Thu, Nov 12, 2009 at 3:32 PM, chrispix <[email protected]> wrote: >> > You are correct. Until it is fixed, I figure this was a workaround >> > that would work :). You can pull accuracy from the GPS, although I am >> > not sure of the exact calculation to determine the pixel circle size >> > on screen based on the zoom view. >> >> > Chris. >> >> > On Nov 12, 2:36 pm, Pieter <[email protected]> wrote: >> > > The only drawback is that the "accuracy indicator" (the blue circle >> > > indicating GPS accuracy) does not work in this case. With a little bit >> > > of work this could probably also be implemented, but it is a little >> > > more complex than just drawing an image. >> >> > > On Nov 12, 6:37 pm, chrispix <[email protected]> wrote: >> >> > > > Actually we got around it by drawing our own dot on the screen.. Here >> > > > is a code snippit.. Inside our >> >> > > > @Override >> > > > public void drawMyLocation(Canvas canvas, MapView >> > mapView, Location >> > > > lastFix, GeoPoint myLocation, long when) >> > > > . >> > > > . >> > > > . >> >> > > > try { >> >> > super.drawMyLocation(canvas,mapView,lastFix,p,when); >> > > > } >> > > > catch (Exception e) >> > > > { >> > > > <DRAW YOUR BITMAP HERE> >> > > > } >> >> > > > Chris. >> >> > > > On Nov 12, 11:21 am, chrispix <[email protected]> wrote: >> >> > > > > It appears to be on the Cliq only.. >> > > > > I actually reported the bug first when it was seen in Cyanogen. >> >> >http://code.google.com/p/cyanogenmod/issues/detail?can=2&q=344&colspe... >> >> > > > > They fixed it. Looks like they had same issue >> >> > > > > Chris. >> >> > > > > On Nov 12, 10:44 am, TreKing <[email protected]> wrote: >> >> > > > > > I also have a user reporting a map crash when using a feature in my >> > app that >> > > > > > uses MyLocationOverlay. >> > > > > > He's also using the Cliq, running 1.5. I cannot reproduce the issue >> > on my G1 >> > > > > > with 1.6 or in the emulator running 1.5. >> > > > > > I'll post back if I get more information from the user on when this >> > happens. >> > > > > > I haven't had any other complaints about this and it's a pretty >> > blatant >> > > > > > issue (crashes as soon as the maps is opened) so I'm assuming is >> > isolated to >> > > > > > his phone, perhaps the Cliq specifically based on Chris's post. >> >> > > > > > Is it possible for the Cliq to have a non-standard build of the >> > maps >> > > > > > library? >> >> > > > > > On Thu, Nov 12, 2009 at 9:02 AM, chrispix <[email protected]> >> > wrote: >> > > > > > > We are having this issue on the cliq.. >> >> > > > > > > Chris. >> >> > > > > > > On Oct 20, 2:53 am, shalafi <[email protected]> wrote: >> > > > > > > > I have seen exactly the same problem, but only reproducible in >> > some >> > > > > > > > phones with non standar builds. Anyway, they are 1.5 flavour. >> >> > > > > > > > The same piece of code works perfectly in a 1.6 G1 Dev Phone. >> >> > > > > > > > If you extend MyLocationOverview and overwrite the draw method >> > it does >> > > > > > > > not crash... anyway this is not a solution since "my location" >> > is not >> > > > > > > > displayed, but proves that this is the prblem. >> >> > > > > > > > What I am very curious about is that Google Maps works fine in >> > that >> > > > > > > > phone. >> >> > > > > > > > On Sep 28, 11:36 pm, CaptainSpam <[email protected]> >> > wrote: >> >> > > > > > > > > Well, I suppose you do have a point. I just thought that >> > 1.6's >> > > > > > > > > "proper" release was a bit more imminent. >> >> > > > > > > > > I'll check back once Donut's fully ready for prime time, >> > then. >> > > > > > > > > Thanks! >> >> > > > > > > > > On Sep 26, 8:48 am, MrChaz <[email protected]> >> > wrote: >> >> > > > > > > > > > Well if they will install a non-released version of the OS >> > then >> > > > > > > that's >> > > > > > > > > > to be expected. >> >> > > > > > > > > > On Sep 25, 10:04 pm, CaptainSpam <[email protected]> >> > wrote: >> >> > > > > > > > > > > Recently, two independent users with 1.6 (Donut) on their >> > phones >> > > > > > > have >> > > > > > > > > > > informed me that my app crashes after it enters a >> > MapView, just as >> > > > > > > > > > > soon as MyLocationOverlay obtains its first location fix. >> > I have >> > > > > > > seen >> > > > > > > > > > > it do so with one of them, in fact. However, when I >> > asked for a >> > > > > > > > > > > logcat, what they sent me seems to indicate the crash >> > originated >> > > > > > > from >> > > > > > > > > > > an uncaught ClassCastException thrown from within >> > MyLocationOverlay >> > > > > > > > > > > itself, not from my code. Worse, I tried running this on >> > the 1.6 >> > > > > > > > > > > emulator and couldn't make it crash (I don't have 1.6 on >> > my actual >> > > > > > > > > > > phone yet), so I am completely lost with this and unsure >> > if it's >> > > > > > > > > > > something odd they were doing on their phones or >> > something I will >> > > > > > > have >> > > > > > > > > > > to worry about when 1.6 gets rolled out to more people. >> >> > > > > > > > > > > One user has tried uninstalling/reinstalling the app >> > numerous >> > > > > > > times, >> > > > > > > > > > > as well as disabling Dalvik-Cache, all to no avail. This >> > app works >> > > > > > > > > > > perfectly on both 1.1 and 1.5 phones. I also tried >> > recompiling the >> > > > > > > > > > > app explicitly using the 1.6 SDK, and it still crashed >> > (as per the >> > > > > > > > > > > user I talked to). Is there anything I would need to >> > consider with >> > > > > > > > > > > regards to MyLocationOverlay when upgrading to 1.6? >> >> > > > > > > > > > > Thanks in advance! >> >> > > > > > > > > > > -- >> > > > > > > > > > > Nicholas Killewald >> >> > > > > > > > > > > What follows is the logcat I received from one user >> > (apologies for >> > > > > > > any >> > > > > > > > > > > formatting problems). I would provide a code snippet, >> > but since >> > > > > > > the >> > > > > > > > > > > exception didn't come from my code, I'm not sure what I >> > would need >> > > > > > > to >> > > > > > > > > > > paste. >> >> > > > > > > > > > > 09-22 11:38:16.106 I/ActivityManager( 158): Displayed >> > activity >> > > > > > > > > > > net.exclaimindustries.geohashdroid/.MainMap: 2846 ms >> > (total 2846 >> > > > > > > ms) >> > > > > > > > > > > 09-22 11:38:16.767 D/libgps ( 158): PDSM_PD_EVENT_BEGIN >> > > > > > > > > > > 09-22 11:38:16.767 D/GpsLocationProvider( 158): >> > Acquiring wakelock >> > > > > > > > > > > 09-22 11:38:16.866 D/libgps ( 158): >> > PDSM_PD_EVENT_COMM_BEGIN >> > > > > > > > > > > 09-22 11:38:16.876 D/libgps ( 158): calling >> > sAGpsStatusCallback >> > > > > > > > > > > GPS_REQUEST_AGPS_DATA_CONN >> > > > > > > > > > > 09-22 11:38:16.916 D/libgps ( 158): >> > qct_agps_data_conn_open: >> > > > > > > > > > > epc.tmobile.com >> > > > > > > > > > > 09-22 11:38:16.916 D/libgps ( 158): >> > DeferredActionThread calling >> > > > > > > > > > > send_pdsm_atl_post_event PDSM_ATL_EVENT_OPEN_SUCCESS >> > > > > > > epc.tmobile.com >> > > > > > > > > > > 09-22 11:38:17.501 D/libgps ( 158): >> > PDSM_PD_EVENT_COMM_CONNECTED >> > > > > > > > > > > 09-22 11:38:17.926 D/libgps ( 158): >> > PDSM_PD_EVENT_GPS_BEGIN >> > > > > > > > > > > 09-22 11:38:18.336 D/libgps ( 158): >> > PDSM_PD_EVENT_COMM_DONE >> > > > > > > > > > > 09-22 11:38:19.088 D/libgps ( 158): calling >> > sAGpsStatusCallback >> > > > > > > > > > > GPS_RELEASE_AGPS_DATA_CONN >> > > > > > > > > > > 09-22 11:38:19.088 D/libgps ( 158): >> > qct_agps_data_conn_closed >> > > > > > > > > > > 09-22 11:38:19.216 D/dalvikvm( 730): GC(0) freed 8209 >> > objects / >> > > > > > > > > > > 611880 bytes in 109ms >> > > > > > > > > > > 09-22 11:38:19.966 D/NetworkLocationProvider( 158): >> > getLocation(): >> > > > > > > > > > > falling back to cell >> > > > > > > > > > > 09-22 11:38:20.126 I/ActivityManager( 158): Start proc >> > > > > > > > > > > com.google.android.apps.maps:LocationFriendService for >> > service >> > > > > > > > > > > com.google.android.apps.maps/ >> >> > com.google.googlenav.friend.android.LocationFriendService: pid=750 >> > > > > > > > > > > uid=10025 gids={3003} >> > > > > > > > > > > 09-22 11:38:20.366 I/Maps.MyLocationOverlay( 730): >> > Running >> > > > > > > deferred >> > > > > > > > > > > on first fix: net.exclaimindustries.geohashdroid.MainMap >> > > > > > > > > > > $initiallocationadjus...@439ec528 >> > > > > > > > > > > 09-22 11:38:20.566 I/ActivityManager( 158): Process >> > > > > > > com.android.mms >> > > > > > > > > > > (pid 614) has died. >> > > > > > > > > > > 09-22 11:38:20.576 D/AndroidRuntime( 730): Shutting down >> > VM >> > > > > > > > > > > 09-22 11:38:20.576 W/dalvikvm( 730): threadid=3: thread >> > exiting >> > > > > > > with >> > > > > > > > > > > uncaught exception (group=0x4001e210) >> > > > > > > > > > > 09-22 11:38:20.576 E/AndroidRuntime( 730): Uncaught >> > handler: >> > > > > > > thread >> > > > > > > > > > > main exiting due to uncaught exception >> > > > > > > > > > > 09-22 11:38:20.636 E/AndroidRuntime( 730): >> > > > > > > > > > > java.lang.ClassCastException: >> > > > > > > android.graphics.drawable.BitmapDrawable >> > > > > > > > > > > 09-22 11:38:20.636 E/AndroidRuntime( 730): at >> > > > > > > > > > > com.google.android.maps.MyLocationOverlay.getLocationDot >> >> ... >> >> read more » > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

