«

android中定时定位的实现

时间:2024-3-2 17:11     作者:韩俊     分类: Android


想要实现这个功能,应该分为三部分工作。
(1)定时功能的实现,调用系统当前时间,使用timer实现定时功能;
(2)当前位置的获取,使用GPS功能获取当前位置,并且显示出经度和纬度,并且使用位置监听事件LocationListener监听位置变化,当位置改变时,获取新的经纬度,并显示;
(3)将两部分功能进行整合为一个整体。
代码如下:
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.annotation.SuppressLint;

import android.app.Activity;

import android.appwidget.AppWidgetManager;

import android.content.Context;

import android.text.method.DateTimeKeyListener;

import android.view.Menu;

import android.widget.TextView;

import android.widget.Toast;





public class TimerActivity extends Activity {

private Handler handler = new Handler();

Timer timer;

Timer timerone;

TimerTask task = new TimerTask() {// 任务

public void run() {

Message message = new Message();

message.what = 1;

handler.sendMessage(message);

}

};

TimerTask taskone = new TimerTask() {// 任务

public void run() {

Message message = new Message();

message.what = 0;

handler.sendMessage(message);

}

};

String g_latLongString;

@SuppressLint("HandlerLeak")

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

timer = new Timer(true);

timer.schedule(task, 0, 5000); // 延时1000ms后执行,1000ms执行一次

timerone = new Timer(true);

timerone.schedule(taskone, 0, 1000); // 延时1000ms后执行,1000ms执行一次

// timer.cancel(); //退出计时器

// 通过系统服务,取得LocationManager对象



//声明LocationManager对象

LocationManager loctionManager;

String contextService=Context.LOCATION_SERVICE;

//通过系统服务,取得LocationManager对象

loctionManager=(LocationManager) getSystemService(contextService);



//通过GPS位置提供器获得位置

// String provider=LocationManager.GPS_PROVIDER;

// Location location = loctionManager.getLastKnownLocation(provider);



//使用标准集合,让系统自动选择可用的最佳位置提供器,提供位置

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 = loctionManager.getBestProvider(criteria, true);



//获得最后一次变化的位置

Location location = loctionManager.getLastKnownLocation(provider);



//显示在TextView中

updateWithNewLocation(location);

//监听位置变化,2秒一次,距离10米以上

loctionManager.requestLocationUpdates(provider, 50000, 2, locationListener);





handler = new Handler() {// 委托

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case 1:

try {

TextView recordLoctionText = (TextView)findViewById(R.id.recordLoctionText);

recordLoctionText.append(g_latLongString + "n");

} catch (Exception e) {

Toast.makeText(getApplicationContext(), e.toString(),

Toast.LENGTH_SHORT).show();

}

break;

case 0:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

Date curDate = new Date(System.currentTimeMillis());// 获取当前时间

String str = formatter.format(curDate);

TextView mytimeText = (TextView)findViewById(R.id.mytimeText);

mytimeText.setText(str );

}

}

};





}





//位置监听器

private final LocationListener locationListener = new LocationListener() {

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override

public void onProviderEnabled(String provider) {

}

@Override

public void onProviderDisabled(String provider) {

updateWithNewLocation(null);

}

//当位置变化时触发

@Override

public void onLocationChanged(Location location) {

//使用新的location更新TextView显示

updateWithNewLocation(location);

}

};



// 将位置信息显示在TextView中

private void updateWithNewLocation(Location location) {

String latLongString;

TextView myLoctionText;

myLoctionText = (TextView) findViewById(R.id.myLoctionText);

if (location != null) {

double lat = location.getLatitude();

double lng = location.getLongitude();

latLongString = "Lat(纬度): " + lat + "nLong(经度): " + lng;

g_latLongString = latLongString;

} else {

latLongString = "没找到位置";

}





// SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

// Date curDate = new Date(System.currentTimeMillis());// 获取当前时间

// String str = formatter.format(curDate);

myLoctionText.setText( "您当前的位置是:n" + latLongString);

}





@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.timer, menu);

return true;

}

}

XML文件:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quot;

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:id="@+id/mytimeText"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text=""

android:textSize="22dip" />

<TextView

android:id="@+id/myLoctionText"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text=""

android:textSize="22dip" />





<ScrollView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:scrollbars="none" >





<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:orientation="vertical" >





<TextView

android:id="@+id/recordLoctionText"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:fadeScrollbars="false"

android:scrollbars="vertical"

android:text=""

android:textColor="#333333"

android:textSize="22dip" />

</LinearLayout>

</ScrollView>





</LinearLayout>

标签: android

热门推荐