我目前完成了學習Android開發的基礎知識,並試圖學會在智能手機中爲我的交通系統項目製作Android GPS應用程序。在編寫複雜代碼時不太好。請建議一些資源或教程,這將大大幫助我使這個應用程序。 - 一旦接近特定路段(可以像0.5公里路段),該應用將通過短信每隔10秒發送一次gps位置(緯度&經度和時間) - 如果電話通過該特定路段,它將停止發送它的位置Android的GPS應用程序的交通應用程序
回答
你爲什麼使用短信服務發送位置?嘗試使用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) && .....) {
} } }); }
}
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
我希望這是非常有用的您。
感謝DynamicMind ...我會花時間理解,研究和實施你給的代碼...非常感謝幫助和鏈接 – coollearner 2011-05-31 09:38:41
您好我已經更新了我的問題請參閱 - http:// stackoverflow。COM /問題/ 8642180/Android的GPS客戶端 - 這-發送-LAT-和長到服務器通過-3G-HSPDA一次-IT-進入 – coollearner 2011-12-27 08:03:10
- 1. Android p2p GPS應用程序
- 2. 通過NDK應用程序訪問GPS
- 3. GPS不工作(Android Web應用程序)
- 4. 跟蹤GPS應用程序 - Android電子
- 5. 開發GPS應用程序
- 6. GPS應用程序崩潰
- 7. Silverlight GPS應用程序
- 8. BlackBerry GPS應用程序
- 9. Windows應用程序和Android應用程序之間的通信
- 10. Web應用程序和Android應用程序之間的通信
- 11. Android應用程序 - 與PC應用程序的通信
- 12. Android通話應用程序
- 13. Android Web應用程序提交過程
- 14. 我的Android應用程序在我的Android應用程序
- 15. Android應用程序和本地桌面應用程序通信
- 16. Android應用程序與GWT應用程序通信
- 17. 基於網絡的GPS應用程序
- 18. 基於GPS的應用程序設計
- 19. 開源的GPS應用程序?
- 20. 如何提交通用應用程序
- 21. 用Python編寫使用GPS數據的Android應用程序
- 22. Delphi應用程序和使用Union的Android應用程序之間的通信
- 23. Joomla應用程序與移動應用程序的交互
- 24. 小應用程序的web應用程序交互
- 25. Android應用程序的推送通知
- 26. 沒有API的Web應用程序的Android應用程序
- 27. 簡單的應用程序內購買應用程序的Android
- 28. 的cocos2d:將iPhone應用程序,通用應用程序
- 29. 在Android應用程序中調用應用程序的API
- 30. 在我的Android應用程序中使用Maps應用程序
感謝dsc的幫助 - 我的項目是一個實用的系統,這意味着它的目標是獲取信息的低成本系統。在我的地方,短信比網絡便宜得多。我會花時間看看你給的代碼。真誠讚賞回覆 – coollearner 2011-05-31 09:43:08
嗨dsc,我想我真的需要使用web服務。你有額外的資源,我可以使用(我不能投票缺乏聲譽)非常感謝 – coollearner 2011-06-02 02:27:12
@coollearner - 你使用什麼樣的網絡服務?嘗試發佈一個不同的問題, – includeMe 2011-06-02 06:37:55