2011-05-31 68 views
0

我目前完成了學習Android開發的基礎知識,並試圖學會在智能手機中爲我的交通系統項目製作Android GPS應用程序。在編寫複雜代碼時不太好。請建議一些資源或教程,這將大大幫助我使這個應用程序。 - 一旦接近特定路段(可以像0.5公里路段),該應用將通過短信每隔10秒發送一次gps位置(緯度&經度和時間) - 如果電話通過該特定路段,它將停止發送它的位置Android的GPS應用程序的交通應用程序

回答

1

你爲什麼使用短信服務發送位置?嘗試使用web服務。

要實現這個應用程序,你必須使用LocationManager和LocationListener庫。 您可以通過創建一個GPS聽力課實施LocationListener的,如下面所示

public class CTLocationListener implements LocationListener{ 




@Override 
public void onLocationChanged(Location location) { 
    Log.w("LOCATION CHANGED", ""+location); 



    if(location != null) { 

     Constants.LATTITUDE = location.getLatitude(); 
     Constants.LONGITUDE = location.getLongitude(); 
     Constants.kAccuracy = location.getAccuracy(); 
     Constants.ALTITUDE_VALUE = location.getAltitude(); 
    } 


} 

@Override 
public void onProviderDisabled(String provider) { 
    Log.i("PROVIDER", "DISABLED:"+provider); 


} 

@Override 
public void onProviderEnabled(String provider) { 
    Log.i("PROVIDER", "ENABLED:"+provider); 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    Log.i("EXTRAS", ""+extras); 
    Log.i("Provider status", ""+status); 
} 

}

在這裏,一個我存儲在常量文件更新的位置開始。開始一個sheduler定期檢查位置,並開始發送消息,如果他們匹配您所需的位置。

要觸發GPS可以使用

LocationListener locationListener = new CTLocationListener(); 
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1.0f, locationListener); 

你需要的調度是一個TimerTask。這可以被實現爲

public class showAccuracy extends TimerTask { 

    @Override 
    public void run() { 

     ghandler.post(new Runnable() { 

      @Override 
      public void run() { 
       if((Constants.Latitude == yourlatitude) && .....) { 

} } }); }

} 
+0

感謝dsc的幫助 - 我的項目是一個實用的系統,這意味着它的目標是獲取信息的低成本系統。在我的地方,短信比網絡便宜得多。我會花時間看看你給的代碼。真誠讚賞回覆 – coollearner 2011-05-31 09:43:08

+0

嗨dsc,我想我真的需要使用web服務。你有額外的資源,我可以使用(我不能投票缺乏聲譽)非常感謝 – coollearner 2011-06-02 02:27:12

+0

@coollearner - 你使用什麼樣的網絡服務?嘗試發佈一個不同的問題, – includeMe 2011-06-02 06:37:55

0
public class HomeActivity extends Activity implements LocationListener{ 
public static Context mContext; 
private double latitude, longitude; 
public LocationManager mLocManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    mContext=this; 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.homelayout); 


    mLocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    mLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, 
      this); 
    mLocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 
      0, this); 
    locationUpdate(); 
    ((Button) this.findViewById(R.id.ButtonHome)) 
      .setOnClickListener(new OnClickListener() { 
       public void onClick(View arg0) { 

         startActivity(new Intent(HomeActivity.this, 
           DefaultDisplay.class)); 

       } 
      }); 

    ((Button) this.findViewById(R.id.ButtonProfile)) 
      .setOnClickListener(new OnClickListener() { 

       public void onClick(View arg0) { 
        if (GUIStatics.boolLoginStatus) { 
         startActivity(new Intent(HomeActivity.this, 
           MyProfile.class)); 
        } else { 
         Intent intent=new Intent(HomeActivity.this, 
           Login.class); 
         intent.putExtra("moveTo","MyProfile"); 
         startActivity(intent); 
        } 
       } 
      }); 

    ((Button) this.findViewById(R.id.ButtonNotifications)) 
      .setOnClickListener(new OnClickListener() { 

       public void onClick(View arg0) { 
        if (GUIStatics.boolLoginStatus) { 
         startActivity(new Intent(HomeActivity.this, 
           ShowAllNotificationActiviry.class)); 
        } else { 
         Intent intent=new Intent(HomeActivity.this, 
           Login.class); 
         intent.putExtra("moveTo","ShowAllNotificationActiviry"); 
         startActivity(intent); 
        } 
       } 
      }); 

    ((Button) this.findViewById(R.id.ButtonFavorites)) 
      .setOnClickListener(new OnClickListener() { 

       public void onClick(View arg0) { 
        if (GUIStatics.boolLoginStatus) { 
         startActivity(new Intent(HomeActivity.this, 
           FavoritesActivity.class)); 
        } else { 
         Intent intent=new Intent(HomeActivity.this, 
           Login.class); 
         intent.putExtra("moveTo","FavoritesActivity"); 
         startActivity(intent); 
        } 
       } 
      }); 

      ((Button) this.findViewById(R.id.ButtonMore)) 
      .setOnClickListener(new OnClickListener() { 
       public void onClick(View arg0) { 
         startActivity(new Intent(HomeActivity.this, 
           MoreListActivity.class)); 
       } 
      }); 

} 

public void locationUpdate() 
{ 
    CellLocation.requestLocationUpdate(); 
} 


public void getAddress(double lat, double lng) { 
    Geocoder geocoder = new Geocoder(HomeActivity.mContext, Locale.getDefault()); 
    try { 
     List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); 
     Address obj = addresses.get(0); 
     String add = obj.getAddressLine(0); 
     GUIStatics.currentAddress = obj.getSubAdminArea() + "," 
       + obj.getAdminArea(); 
     GUIStatics.latitude = obj.getLatitude(); 
     GUIStatics.longitude = obj.getLongitude(); 
     GUIStatics.currentCity= obj.getSubAdminArea(); 
     GUIStatics.currentState= obj.getAdminArea(); 
     add = add + "\n" + obj.getCountryName(); 
     add = add + "\n" + obj.getCountryCode(); 
     add = add + "\n" + obj.getAdminArea(); 
     add = add + "\n" + obj.getPostalCode(); 
     add = add + "\n" + obj.getSubAdminArea(); 
     add = add + "\n" + obj.getLocality(); 
     add = add + "\n" + obj.getSubThoroughfare(); 

     Log.v("IGA", "Address" + add); 
     // Toast.makeText(this, "Address=>" + add, 
     // Toast.LENGTH_SHORT).show(); 

     // TennisAppActivity.showDialog(add); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
} 



public void onLocationChanged(Location location) { 
    latitude = location.getLatitude(); 
    longitude = location.getLongitude(); 
    GUIStatics.latitude=location.getLatitude(); 
    GUIStatics.longitude= location.getLongitude(); 
    Log.v("Test", "IGA" + "Lat" + latitude + " Lng" + longitude); 
    //mLocManager.r 

    getAddress(latitude, longitude); 
    if(location!=null) 
    { 

    mLocManager.removeUpdates(this); 
    } 
    // Toast.makeText(this, "Lat" + latitude + " Lng" + longitude, 
    // Toast.LENGTH_SHORT).show(); 
} 


public void onProviderDisabled(String arg0) { 
    // TODO Auto-generated method stub 
    Toast.makeText(HomeActivity.this, "Gps Disabled", Toast.LENGTH_SHORT).show(); 
    Intent intent = new Intent(
      android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
    startActivity(intent); 
} 


public void onProviderEnabled(String arg0) { 
    // TODO Auto-generated method stub 

} 


public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
    if(arg1 == 
      LocationProvider.TEMPORARILY_UNAVAILABLE) { 
            Toast.makeText(HomeActivity.this, 
      "LocationProvider.TEMPORARILY_UNAVAILABLE", 
      Toast.LENGTH_SHORT).show(); 
         } 
         else if(arg1== LocationProvider.OUT_OF_SERVICE) { 
            Toast.makeText(HomeActivity.this, 
      "LocationProvider.OUT_OF_SERVICE", Toast.LENGTH_SHORT).show(); 
         } 

} 

}

這是代碼使用了越來越緯度和經度或設備,也有大約拉特長期使用get地址功能的所有信息。

這裏有一些其他的網址對你來說非常有用。 http://developer.android.com/reference/android/location/LocationManager.html http://code.google.com/p/open-gpstracker/ http://androidcommunity.com/forums/f4/android-gps-support-and-info-55/ http://www.devx.com/wireless/Article/43005 http://android-er.blogspot.com/2011/02/get-locationlatitude-and-longitude-from.html

我希望這是非常有用的您。

+0

感謝DynamicMind ...我會花時間理解,研究和實施你給的代碼...非常感謝幫助和鏈接 – coollearner 2011-05-31 09:38:41

+0

您好我已經更新了我的問題請參閱 - http:// stackoverflow。COM /問題/ 8642180/Android的GPS客戶端 - 這-發送-LAT-和長到服務器通過-3G-HSPDA一次-IT-進入 – coollearner 2011-12-27 08:03:10