Android 에서 GPS 포 지 셔 닝 의 용법 인 스 턴 스

7086 단어 AndroidGPS
GPS 포 지 셔 닝 은 현재 많은 휴대 전화 에 있 는 기능 이 며 매우 실용적이다.본 고 는 안 드 로 이 드 에서 GPS 포 지 셔 닝 의 용법 을 실례 적 으로 서술 하 였 다.여러분 께 참고 용 으로 나 누 어 드 리 겠 습 니 다.구체 적 인 방법 은 다음 과 같다.
일반적으로 Android 에서 GPS 를 통 해 현재 위 치 를 얻 습 니 다.먼저 LocationManager 인 스 턴 스 를 얻 고 이 인 스 턴 스 의 getLast KnownLocation()방법 을 통 해 첫 번 째 위 치 를 얻 습 니 다.이 방법 에 대한 설명 은 다음 과 같 습 니 다.

void android.location.LocationManager.requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)

provider 는 포 지 셔 닝 방식 으로 GPS 포 지 셔 닝(LocationManager.GPSPROVIDER)또는 네트워크 포 지 셔 닝(LocationManager.NETWORKPROVIDER)본 고 는 GPS 포 지 셔 닝 이 므 로 LocationManager.GPS 를 사용 합 니 다.PROVIDER。minTime 은 위치 업데이트 간격 입 니 다.listener 는 위치 가 바 뀐 감청 기 입 니 다.스스로 LocationListener()를 정의 하고 onLocationChanged()를 다시 쓰 며 위치 가 바 뀔 때의 동작 을 추가 합 니 다.
레이아웃 파일 은 다음 과 같 습 니 다:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context=".MainActivity" >
 
  <TextView
    android:id="@+id/txt_time"
    style="@style/my_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="  :" />
 
  <TextView
    android:id="@+id/txt_lat"
    style="@style/my_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="  :" />
 
  <TextView
    android:id="@+id/txt_lng"
    style="@style/my_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="  :" />
 
</LinearLayout>

MainActivity.java 파일 은 다음 과 같 습 니 다.

package com.hzhi.my_gps;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
   
  TextView txt_time;
  TextView txt_lat;
  TextView txt_lng;
  LocationManager lom;
  Location loc;
  Double lat;
  Double lng;
  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  Date now;
  String str_date;
  Timer timer;
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
     
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     
    get_con();
    get_gps();
     
    timer = new Timer(true);
    timer.schedule(task, 0, 1000);
  }
 
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }
   
  public void get_gps(){
     
    lom = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    loc = lom.getLastKnownLocation(LocationManager.GPS_PROVIDER);
     
    if (loc != null) {
      lat = loc.getLatitude();
      lng = loc.getLongitude();
      txt_lat.setText("  :" + String.valueOf(lat));
      txt_lng.setText("  :" + String.valueOf(lng));
    }
    else{
      txt_lat.setText("  :  " );
      txt_lng.setText("  :  " );
    }
     
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    String provider = lom.getBestProvider(criteria, true);
     
    lom.requestLocationUpdates(provider, 1000, 10, los);
  }
   
  LocationListener los = new LocationListener(){
    public void onLocationChanged(Location location){
      if (location != null) {
        lat = location.getLatitude();
        lng = location.getLongitude();
        txt_lat.setText("  :" + String.valueOf(lat));
        txt_lng.setText("  :" + String.valueOf(lng));
      }
      else{
        txt_lat.setText("  :  " );
        txt_lng.setText("  :  " );
      }
    };
     
    public void onProviderDisabled(String provider){
     
    };
     
    public void onProviderEnabled(String provider){ };
     
    public void onStatusChanged(String provider, int status,
    Bundle extras){ };
  };
   
  //     
  public void get_con(){
     
    txt_time = (TextView) findViewById(R.id.txt_time);
    txt_lat = (TextView) findViewById(R.id.txt_lat);
    txt_lng = (TextView) findViewById(R.id.txt_lng);
  }
   
  Handler handler = new Handler(){
     
    public void handleMessage(Message msg){
      switch (msg.what){
      case 1:
        get_time();
        break;
      }
    }
  };
   
  TimerTask task = new TimerTask(){ 
     public void run() { 
       Message message = new Message();   
       message.what = 1;   
       handler.sendMessage(message);  
    } 
  };
   
  //     
  public void get_time(){
     
    now = new Date(System.currentTimeMillis());
    str_date = formatter.format(now);
    txt_time.setText("  :" + str_date);
  }
}

AndroidManifest.xml 파일 에 권한 추가:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

운행 전에 먼저 GPS 위성 을 켜 고 운행 결 과 는 다음 그림 과 같다.

독자 들 은 실외 신호 가 충분 한 곳 에서 GPS 위 치 를 얻 을 수 있다.
이 글 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기