2018年12月7日 星期五

[Android]_ch9.11_GoogleMap定位技術





[Android]_ch9.11_GoogleMap定位技術





android.location套件提供位置相關功能,無須搭配Google地圖所以不需要申請API金鑰
如果用到定位技術,依然要manifest檔案內加入下列設定:
允許網路定位
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
/>
允許GPS定位
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
定位,就是找到自己位置
取得LocationManager物件
建立Criteria規則物件
呼叫LocationManager.getBestProvider(Criteria
criteria,
boolean
enabledOnly)取得最適合的定位名稱provider
呼叫LocationManager.getLastKnownLocation(String
provider)

取得自己最新位置
更新自己位置
呼叫LocationManager.requestLocationUpdates(String
provider, long
minTime,
float
minDistance,
LocationListener
listener)
註冊LocationListener
位置改變時,會自動呼叫LocationListeneronLocationChanged
(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);
}

}


沒有留言:

張貼留言

Ether.fi Cash Card 一張所有人必備的加密貨幣信用卡   [Ether.fi Cash Card] : https://www.ether.fi/app/cash/sign-up?ref_code=d27f8523 ------國際交易所------ [Bitg...