qinxu 2013-09-13
AndroidManifest.xml
<uses-permissionandroid:name="android.permission.RESTART_PACKAGES"/><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
main.java
package com.mrsoft.mrgps.app.mr; import android.app.Activity; import android.app.ActivityManager; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; import android.widget.Toast; public class main extends Activity { private TextView tv; private LocationManager lm; private Criteria criteria; private Location location; private final static int MENU_ABOUT = Menu.FIRST; private final static int MENU_EXIT = Menu.FIRST+1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv = (TextView)findViewById(R.id.tv); lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); if (!lm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) { Toast.makeText(this, "GPS已关闭,请手动开启GPS后再试!", Toast.LENGTH_SHORT).show(); return; } else { Toast.makeText(this, "GPS定位中...", Toast.LENGTH_SHORT).show(); } criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); // 设置精确度 criteria.setAltitudeRequired(true); // 设置请求海拔 criteria.setBearingRequired(true); // 设置请求方位 criteria.setCostAllowed(true); // 设置允许运营商收费 criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗 String provider = lm.getBestProvider(criteria, true); location = lm.getLastKnownLocation(provider); newLocalGPS(location); // 监听1秒一次 忽略位置变化 lm.requestLocationUpdates(provider, 1*1000, 0, new locationListener()); } class locationListener implements LocationListener { @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub newLocalGPS(location); } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub newLocalGPS(null); } @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 } } private void newLocalGPS(Location location) { if (location!=null) { double latitude = location.getLatitude(); //精度 double longitude = location.getLongitude(); // 纬度 double speed = location.getSpeed(); // 速度 double altitude = location.getAltitude(); // 海拔 double bearing = location.getBearing(); // 方位 tv.setText("精度"+latitude+'\n'+ "纬度"+longitude+'\n'+ "速度"+speed+"m/s"+'\n'+ "海拔"+altitude+"m"+'\n'+ "方位"+bearing+'\n'); } else { // 未获取地理信息位置 tv.setText("地理信息位置未知或正在获取地理信息位置中..."); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub menu.add(0, MENU_ABOUT, 1, "关于"); menu.add(0, MENU_EXIT, 2, "退出"); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case MENU_ABOUT: AlertDialog.Builder bd = new Builder(main.this); bd.setMessage("mrGPS.apk\n版本:1.0\n作者:mrandexe"); bd.setTitle("关于"); bd.setPositiveButton("确认", new OnClickListener(){ @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub arg0.dismiss(); } }); bd.create().show(); break; case MENU_EXIT: exit(); break; } return super.onOptionsItemSelected(item); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0) { exit(); return true; } return super.onKeyDown(keyCode, event); } private void exit() { AlertDialog.Builder builder = new Builder(main.this); builder.setMessage("确认退出吗?"); builder.setTitle("提示"); builder.setPositiveButton("确认", new OnClickListener(){ @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub arg0.dismiss(); ActivityManager actMgr = (ActivityManager)getSystemService(ACTIVITY_SERVICE); actMgr.restartPackage(getPackageName()); } }); builder.setNegativeButton("取消", new OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub dialog.dismiss(); } }); builder.create().show(); } }
main.xml
<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:text="TextView"android:layout_width="wrap_content"android:id="@+id/tv"android:layout_height="wrap_content"></TextView></LinearLayout>