java - getting the gps position not working -


i dont know why, unable gps position... lm.getlastknownlocation returns null , onlocationchanged never called. can see gps icon on system tray.

any ideas?

package com.localfotos;  import java.io.bufferedoutputstream; import java.io.bufferedreader; import java.io.file; import java.io.fileoutputstream; import java.io.ioexception; import java.io.inputstream; import java.io.inputstreamreader; import java.net.malformedurlexception; import java.net.url; import java.net.urlconnection;  import org.apache.http.httpentity; import org.apache.http.httpresponse; import org.apache.http.client.httpclient; import org.apache.http.client.methods.httppost; import org.apache.http.impl.client.defaulthttpclient; import org.json.jsonexception; import org.json.jsonobject;  import android.content.context; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.graphics.canvas; import android.graphics.matrix; import android.graphics.paint; import android.location.location; import android.location.locationlistener; import android.location.locationmanager; import android.os.bundle; import android.os.handler; import android.service.wallpaper.wallpaperservice; import android.util.log; import android.view.motionevent; import android.view.surfaceholder;    /*  * animated wallpaper draws rotating wireframe cube.  */ public class mywallpaperservice extends wallpaperservice implements locationlistener{      private final string tag = "wallpaperservice============================";     private locationmanager lm;     private final handler mhandler = new handler();       @override     public void onlocationchanged(location location) {         log.d(tag, "got location!");      }      @override     public void onproviderdisabled(string provider) {         // todo auto-generated method stub      }      @override     public void onproviderenabled(string provider) {         // todo auto-generated method stub      }      @override     public void onstatuschanged(string provider, int status, bundle extras) {         // todo auto-generated method stub      }       @override     public void oncreate() {         lm = (locationmanager)getsystemservice(context.location_service);         lm.requestlocationupdates(locationmanager.gps_provider, 1000, 0, this);         super.oncreate();      }      @override     public void ondestroy() {         super.ondestroy();         lm.removeupdates(this);     }      @override     public engine oncreateengine() {         return new cubeengine(this);     }       class cubeengine extends engine{          mywallpaperservice mws;          private final runnable mdrawcube = new runnable() {             public void run() {                 drawframe();             }         };         private boolean mvisible;         private double lat = -1;         private double lon = -1;          cubeengine(mywallpaperservice mymws) {             mws = mymws;         }          @override         public void ondestroy() {             super.ondestroy();             mhandler.removecallbacks(mdrawcube);         }          @override         public void onvisibilitychanged(boolean visible) {             mvisible = visible;             if (visible) {                 drawframe();             } else {                 mhandler.removecallbacks(mdrawcube);             }         }          @override         public void onsurfacechanged(surfaceholder holder, int format, int width, int height) {             super.onsurfacechanged(holder, format, width, height);             drawframe();         }          @override         public void onsurfacecreated(surfaceholder holder) {             super.onsurfacecreated(holder);         }          @override         public void onsurfacedestroyed(surfaceholder holder) {             super.onsurfacedestroyed(holder);             mvisible = false;             mhandler.removecallbacks(mdrawcube);         }          @override         public void onoffsetschanged(float xoffset, float yoffset,                 float xstep, float ystep, int xpixels, int ypixels) {             drawframe();         }          /*          * store position of touch event can use drawing later          */         @override         public void ontouchevent(motionevent event) {             super.ontouchevent(event);         }          /*          * draw 1 frame of animation. method gets called repeatedly          * posting delayed runnable. can drawing want in          * here. example draws wireframe cube.          */         void drawframe() {             final surfaceholder holder = getsurfaceholder();              canvas c = null;             try {                 c = holder.lockcanvas();                 if (c != null) {                     // draw                     drawcube(c);                 }             } {                 if (c != null) holder.unlockcanvasandpost(c);             }              // reschedule next redraw             mhandler.removecallbacks(mdrawcube);             if (mvisible) {                 mhandler.postdelayed(mdrawcube, 1000 * 10);             }         }          /*          * draw wireframe cube drawing 12 3 dimensional lines between          * adjacent corners of cube          */          //taken http://p-xr.com/android-tutorial-how-to-parse-read-json-data-into-a-android-listview/         private jsonobject getjsonfromurl(string url){              //initialize             inputstream = null;             string result = "";             jsonobject jarray = null;              //http post             try{                 httpclient httpclient = new defaulthttpclient();                 httppost httppost = new httppost(url);                 httpresponse response = httpclient.execute(httppost);                 httpentity entity = response.getentity();                 = entity.getcontent();              }catch(exception e){                 log.e("log_tag", "error in http connection "+e.tostring());             }              //convert response string             try{                 bufferedreader reader = new bufferedreader(new inputstreamreader(is,"iso-8859-1"), 8);                 stringbuilder sb = new stringbuilder();                 string line = null;                 while ((line = reader.readline()) != null) {                     sb.append(line + "\n");                 }                 is.close();                 result=sb.tostring();             }catch(exception e){                 log.e("log_tag", "error converting result "+e.tostring());             }              //try parse string json object             try{                     jarray = new jsonobject(result);             }catch(jsonexception e){                 log.e("log_tag", "error parsing data "+e.tostring());             }              return jarray;         }           string getpanoramiourl(double minx, double maxx, double maxy, double miny){             return "http://www.panoramio.com" +                     "/map/get_panoramas.php?" +                     "set=public&from=0&to=1&minx="+minx+"&miny="+miny+"&maxx="+maxx+"&maxy="+maxy;         }          void drawcube(canvas canvas) {             //canvas.save();             //canvas.translate(0, 0);             //c.drawcolor(0xff00aa00);              location loc = mws.lm.getlastknownlocation(locationmanager.gps_provider);              try{                 if (lat == loc.getlatitude() && lon == loc.getlongitude()){                     return;                 }             }catch(nullpointerexception exc){                 log.d(tag, "gps not ready");                 return;             }             lat = loc.getlatitude();             lon = loc.getlongitude();          }       } } 

<application android:icon="@drawable/icon" android:label="@string/app_name">      <service android:name=".mywallpaperservice"         android:label="@string/app_name"         android:icon="@drawable/icon"         android:permission="android.permission.bind_wallpaper">          <intent-filter>             <action android:name="android.service.wallpaper.wallpaperservice" />         </intent-filter>         <meta-data android:name="android.service.wallpaper"             android:resource="@xml/livewallpaper" />      </service>  </application> 

you need add

<uses-permission android:name="android.permission.access_fine_location" /> 

to use gps. use network location, use:

<uses-permission android:name="android.permission.access_coarse_location" /> 

i think work you.


Comments

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -