需求 :

 

獲得手機的座標 即時不斷的顯示在應用裡

 

Activity.java

 

package com.huitu;

 

import android.app.Activity;

 

import android.app.AlertDialog;

 

import android.content.CoNtext;

 

import android.content.DialogInterface;

 

import android.location.Location;

 

import android.location.LocationListener;

 

import android.location.LocationManager;

 

import android.os.Bundle;

 

import android.view.KeyEvent;

 

import android.widget.TextView;

 

public class MainActivity extends Activity {

 

private LocationManager locationManager;

 

private TextView tv;

 

//private StringBuilder builder = new StringBuilder("位置資訊:\n");

 

@Override

 

public void onCreate(Bundle savedInstanceState) {

 

super.onCreate(savedInstanceState);

 

setContentView(R.layout.main);

 

locationManager = (LocationManager) getSystemService(CoNtext.LOCATION_SERVICE);

 

tv = (TextView) findViewById(R.id.myTextView01);

 

String provider = LocationManager.GPS_PROVIDER;

 

Location location = locationManager.getLastKnownLocation(provider);

 

//updateMsg(location);

 

LocationListener ll = new LocationListener(){

 

public void onLocationChanged(Location l) {

 

//updateMsg(l);

 

StringBuilder builder = new StringBuilder("位置資訊:\n");

 

if (l != null) {

 

double lat = l.getLatitude();

 

double lng = l.getLongitude();

 

builder.append("(");

 

builder.append(lat);

 

builder.append(",");

 

builder.append(lng);

 

builder.append(")");

 

if(l.hasAccuracy()){

 

builder.append("\n精度:");

 

builder.append(l.getAccuracy());

 

}

 

if(l.hasAltitude()){

 

builder.append("\n高度:");

 

builder.append(l.getAltitude());

 

}

 

if(l.hasBearing()){

 

builder.append("\n方向:");

 

builder.append(l.getBearing());

 

}

 

if(l.hasSpeed()){

 

builder.append("\n速度:");

 

builder.append(l.getSpeed());

 

}

 

builder.append("\n");

 

} else {

 

builder.append("沒有位置資訊");

 

}

 

tv.setText(builder);

 

}

 

public void onProviderDisabled(String provider) {

 

}

 

public void onProviderEnabled(String provider) {

 

}





public void onStatusChanged(String provider, int status,

 

Bundle extras) {

 

}

 

};

 

locationManager.requestLocationUpdates(provider, 500, 5,

 

ll);

 

}

 

// private void updateMsg(Location l) {

 

// StringBuilder builder = new StringBuilder("位置資訊:\n");

 

// if (l != null) {

 

// double lat = l.getLatitude();

 

// double lng = l.getLongitude();

 

// builder.append("(");

 

// builder.append(lat);

 

// builder.append(",");

 

// builder.append(lng);

 

// builder.append(")");

 

//

 

// if(l.hasAccuracy()){

 

// builder.append("\n精度:");

 

// builder.append(l.getAccuracy());

 

// }

 

//

 

// if(l.hasAltitude()){

 

// builder.append("\n高度:");

 

// builder.append(l.getAltitude());

 

// }

 

//

 

// if(l.hasBearing()){

 

// builder.append("\n方向:");

 

// builder.append(l.getBearing());

 

// }

 

//

 

// if(l.hasSpeed()){

 

// builder.append("\n速度:");

 

// builder.append(l.getSpeed());

 

// }

 

//

 

// builder.append("\n");

 

//

 

// } else {

 

// builder.append("沒有位置資訊");

 

// }

 

// tv.setText(builder);

 

// }

 

@Override

 

public boolean onKeyDown(int keyCode, KeyEvent event) {

 

// 按下鍵盤上返回按鈕

 

if (keyCode == KeyEvent.KEYCODE_BACK) {

 

new AlertDialog.Builder(this)

 

.setMessage("確定退出系統嗎?")

 

.setNegativeButton("取消",

 

new DialogInterface.OnClickListener() {

 

public void onClick(DialogInterface dialog,

 

int which) {

 

}

 

})

 

.setPositiveButton("確定",

 

new DialogInterface.OnClickListener() {

 

public void onClick(DialogInterface dialog,

 

int whichButton) {

 

finish();

 

}

 

}).show();

 

return true;

 

} else {

 

return super.onKeyDown(keyCode, event);

 

}

 

}

 

@Override

 

protected void onDestroy() {

 

super.onDestroy();

 

// 或者下面這種方式

 

//System.exit(0);

 

//建議用這種

 

android.os.Process.killProcess(android.os.Process.myPid());

 

}

 

}

 

最小時間 500

 

最短距離 5

 

locationManager.requestLocationUpdates(provider, 500, 5,

 

ll);

 

當符合這些條件時 更新當前位置

 

當更新位置時 就會掉用 location的onLocationChanged方法 來更新UI

 

剛開始 我封裝了一個方法 updateMsg() 但是 在onLocationChanged裡面調用 貌似 UI不會變化

 

所以 又把updateMsg()的代碼寫到了onLocationChanged裡面

 

XML

 

<?xml version="1.0" encoding="utf-8"?>

 

<LinearLayout xmlns:android="HTTP://schemas.android.com/apk/res/android"

 

android:orientation="vertical" android:layout_width="fill_parent"

 

android:layout_height="fill_parent">

 

<TextView

 

android:text=""

 

android:id="@+id/myTextView01"

 

android:layout_width="wrap_content"

 

android:layout_height="wrap_content"/>

 

</LinearLayout>
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()