[Android]_ch9.11_GoogleMap定位技術
android.location套件提供位置相關功能,但無須搭配Google地圖,所以不需要申請API金鑰
如果用到定位技術,依然要在manifest檔案內加入下列設定:
允許網路定位
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
/>
android:name="android.permission.ACCESS_COARSE_LOCATION"
/>
允許GPS定位
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
定位,就是找到自己位置
取得LocationManager物件
建立Criteria規則物件
呼叫LocationManager.getBestProvider(Criteria
criteria,
boolean
enabledOnly)取得最適合的定位名稱(provider)
criteria,
boolean
enabledOnly)取得最適合的定位名稱(provider)
呼叫LocationManager.getLastKnownLocation(String
provider)
取得自己最新位置
provider)
取得自己最新位置
更新自己位置
呼叫LocationManager.requestLocationUpdates(String
provider, long minTime,
float minDistance,
LocationListener
listener)註冊LocationListener
provider, long minTime,
float minDistance,
LocationListener
listener)註冊LocationListener
位置改變時,會自動呼叫LocationListener的onLocationChanged
(Location location) 並傳入新的位置
(Location location) 並傳入新的位置
package com.gjun.ch23_location;
import java.sql.Date;
import android.app.Activity;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
EditText et1;
TextView tv1,tv2;
Button btn1;
LocationManager LM;
Location myLocation;
Criteria criteria;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.textView1);
tv2=(TextView)findViewById(R.id.textView2);
btn1=(Button)findViewById(R.id.button1);
et1=(EditText)findViewById(R.id.editText1);
LM=(LocationManager)getSystemService(LOCATION_SERVICE);
criteria=new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String best=LM.getBestProvider(criteria,true);
Location location=LM.getLastKnownLocation(best);
this.myLocation=location;
updateLocation(myLocation);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
}
public void updateLocation(Location location){
StringBuilder sb=new StringBuilder("當前最新位置資訊如下:\n");
Date date=new Date(location.getTime());
DateFormat dateFormat=new DateFormat();
sb.append("定位時間:"+dateFormat.format("MM/dd/yy h:mm", date)+"\n");
sb.append("緯度:"+location.getLatitude()+"\n");
sb.append("經度:"+location.getLongitude()+"\n");
sb.append("精準度:"+location.getAccuracy()+"\n");
sb.append("高度:"+location.getAltitude()+"\n");
sb.append("速度:"+location.getSpeed()+"\n");
sb.append("方向:"+location.getBearing()+"\n");
sb.append("定位方式:"+location.getProvider()+"\n");
tv1.setText(sb);
}
LocationListener listener=new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
myLocation=location;
updateLocation(myLocation);
Toast.makeText(MainActivity.this, "位置改變!", Toast.LENGTH_SHORT).show();
}
};
@Override
protected void onResume() {
String best=LM.getBestProvider(criteria, true);
LM.requestLocationUpdates(best, 10000, 50, listener);
}
}
沒有留言:
張貼留言