2014-02-07 137 views
0

我正在开发一个应用程序,我在屏幕上按下屏幕上的一个按钮,将经纬度上传到服务器,异步任务正在启动并执行操作并将经度和纬度上传到服务器端口。 现在的问题是,GPS无法找到经度和纬度。它在服务器端口上抛出空值。请帮我在下面我的代码被赋予.....提前 感谢GPS没有获取位置更新

class Server extends AsyncTask<String, Integer, String> implements LocationListener{ 
@Override 
protected String doInBackground(String... arg0) { 

Looper.myLooper(); 
Looper.prepare(); 
for(int i=0;i<9898;i++){ 
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
       locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,this); 
sendstring=phonenumber+latitude+longitude+"12345467788"; 
System.out.println(sendstring+"4532748"); 
stopUsingGPS(); 
try { 
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build(); 
StrictMode.setThreadPolicy(policy); 
Socket socket = null; 
try { 
int REDIRECTED_SERVERPORT=31997; 
InetAddress serverAddr = InetAddress.getByName(serverIpAddress); 
socket = new Socket(serverAddr, REDIRECTED_SERVERPORT); 
        } catch (UnknownHostException e1) { 
         e1.printStackTrace(); 
        } catch (IOException e1) { 
         e1.printStackTrace(); 
        }        
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); 

out.println(sendstring); 
        /*latitude=0.0; 
        longitude=0.0;*/ 
      } 

       catch (UnknownHostException e1) { 
        e1.printStackTrace(); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
       } 




       catch (Exception e) { 


       } 
     } 
      return call1; 
     } 

     @Override 
public void onLocationChanged(Location location) { 


      latitude=location.getLatitude(); 
      longitude=location.getLongitude(); 
     } 
@Override 
public void onProviderDisabled(String provider) { 


     } 
@Override 
public void onProviderEnabled(String provider) { 
    } 
@Override 
public void onStatusChanged(String provider, int status, 
       Bundle extras) { 
} 

public void stopUsingGPS(){ 
      if(locationManager != null){ 
       locationManager.removeUpdates(this); 
      }  
     } 
+0

使用此 http://stackoverflow.com/questions/18051958/use-service-to-get-gps-location-android/18052280#18052280 –

+0

@Mayank Saini如何使用而不使用网络提供商? – appukrb

+0

我已经发布了没有网络提供商的答案。它只是使用GPS,如果GPS不可用,则使用网络提供商。我已经在下面发布的答案中删除了网络提供商。 –

回答

0

,最好的办法是通过CWAC位置轮询服务以使用位置服务已经由供我们使用它只是你必须给的时间间隔来唤醒它

做到像DIS方式n您需要的jar文件,你可以从[这里] https://github.com/commonsguy/cwac-locpoll

从您的活动得到它开始LocationPoller并设定闹钟重复到你想要的时间

AlarmManager alarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE); 
Intent i = new Intent(this, LocationPoller.class); 

Bundle bundle = new Bundle(); 
LocationPollerParameter parameter = new LocationPollerParameter(bundle); 
parameter.setIntentToBroadcastOnCompletion(new Intent(this, 
     LocationReceiver.class)); 
// try GPS and fall back to NETWORK_PROVIDER 
parameter.setProviders(new String[] { LocationManager.GPS_PROVIDER }); 
parameter.setTimeout(120000); 
i.putExtras(bundle); 

PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0); 
alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
     SystemClock.elapsedRealtime(), 300000, pi); 

请从这里您可以获取LATñLON

public class LocationReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 


    try {  
     Bundle b=intent.getExtras(); 

     LocationPollerResult locationResult = new LocationPollerResult(b); 

     Location loc=locationResult.getLocation(); 
     String msg; 

     if (loc==null) { 
     loc=locationResult.getLastKnownLocation(); 

     if (loc==null) { 
      msg=locationResult.getError(); 
     } 
     else { 
      msg="TIMEOUT, lastKnown="+loc.toString(); 
     } 
     } 
     else { 
     msg=loc.toString(); 



     Log.i("Location Latitude", String.valueOf(loc.getLatitude())); 
     Log.i("Location Longitude", String.valueOf(loc.getLongitude())); 
     Log.i("Location Accuracy", String.valueOf(loc.getAccuracy())); 




     } 

     Log.i(getClass().getSimpleName(), "received location: " + msg); 



    } 
    catch (Exception e) { 
     Log.e(getClass().getName(), e.getMessage()); 
    } 
    } 

,这增加了接收机类定位接收机您的清单

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

    <receiver android:name="com.commonsware.cwac.locpoll.LocationPoller" /> 

    <service android:name="com.commonsware.cwac.locpoll.LocationPollerService" /> 

和接收器的声明在那里你会取一切

<receiver android:name="com.RareMediaCompany.Helios.LocationReceiver" /> 
+0

LocationPollerParameter,LocationPollerResult显示错误 – user3110606

+0

对不起,这是一个过时的库使用此库[https://www.dropbox.com/sh/pgxk2v9l5vl0h2j/3svyZnuwOK/CWAC-LocationPoller.jar –

+0

E/LocationPoller(4626):Invalid Intent - 没有提供程序显示此错误 – user3110606