android平台获取手机所在位置经纬度
android平台获取手机所在位置经纬度
发布时间:2015-06-05 来源:查字典编辑
摘要:以下程序经测试没有问题,功能主要有:1)获取当前GPS经纬度信息2)其他手机发送相应短信后,本机可以自动回复短信,以此获取到设备的经纬度信息...

以下程序经测试没有问题,功能主要有:

1)获取当前GPS经纬度信息

2)其他手机发送相应短信后,本机可以自动回复短信,以此获取到设备的经纬度信息

package com.freshen.test;

import android.app.Activity;

import android.app.PendingIntent;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

import android.os.Bundle;

import android.telephony.SmsManager;

import android.telephony.SmsMessage;

import android.text.TextUtils;

import android.text.method.ScrollingMovementMethod;

import android.util.Log;

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 TestLocationActivity extends Activity implements OnClickListener{

TextView txt;

Button getLc;

EditText phoneNumber;

//定位信息

LocationManager locationManager;

Location location;

//发送短信

Context mContext=null;

//接收短信的广播

SmsBroadcastReceiver smsbr;

//经纬度

double latitude,longitude;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(yout.main);

mContext=this;

//

txt=(TextView) findViewById(R.id.tv_txt);

txt.setMovementMethod(ScrollingMovementMethod.getInstance());

getLc=(Button) findViewById(R.id.bt_getLc);

phoneNumber=(EditText) findViewById(R.id.phone);

getLc.setOnClickListener(this);

//注册短信发送与对方接收到 广播 消息

registerReceiver(sendMsg, new IntentFilter("SENT_SMS_ACTION"));

registerReceiver(delivery, new IntentFilter("DELIVERED_SMS_ACTION"));

//注册接收短信广播

IntentFilter smsitf=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

smsitf.setPriority(10000);

smsbr=new SmsBroadcastReceiver();

registerReceiver(smsbr,smsitf);

/*位置获取经纬度*/

//位置管理器 实例

locationManager=(LocationManager) getSystemService(LOCATION_SERVICE);

//位置更新 监听器注册

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);

}

//LocationListener位置变化的监听器

private final LocationListener locationListener=new LocationListener(){

@Override

public void onLocationChanged(Location location) {

// TODO Auto-generated method stub

if(location!=null){

latitude=location.getLatitude();

longitude=location.getLongitude();

Log.e("locationListener 经纬度", latitude+":"+longitude);

}

}

@Override

public void onProviderDisabled(String provider) {

// TODO Auto-generated method stub

}

@Override

public void onProviderEnabled(String provider) {

// TODO Auto-generated method stub

}

@Override

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

// TODO Auto-generated method stub

}};

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

if(arg0.getId()==R.id.bt_getLc){

Log.e("log", "开始获取经纬度信息!");

//获取 经纬度信息

setTitle("开始获取经纬度>>");

String lc=getLoaction();

//String num=phoneNumber.getEditableText().toString();

//Log.e("phoneNumber", num);

//sendMsg(lc,num);

if(latitude<1)txt.setText("获取定位中……");

txt.append(lc);

}

}

//获取经纬度的方法

public String getLoaction(){

/*

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

location =locationManager.getLastKnownLocation(WORK_PROVIDER);

int i=0;

while(location==null){

Log.e("log", location+"");

location =locationManager.getLastKnownLocation(WORK_PROVIDER);

if(i++>100)break;

}

double latitude=location.getLatitude();

double longitude=location.getLongitude();

txt.setText("纬度:"+latitude +"n"+"经度:"+longitude);

*/

return "纬度:("+latitude +")t经度:("+longitude+")n";

}

//发送短信

public void sendMsg(String msg,String num){

if(TextUtils.isEmpty(msg)||TextUtils.isEmpty(num))

return ;

SmsManager sms=SmsManager.getDefault();

Intent sendIntent =new Intent("SENT_SMS_ACTION");

PendingIntent sentPI=PendingIntent.getBroadcast(this, 0, sendIntent, 0);

Intent deliverIntent =new Intent("DELIVERED_SMS_ACTION");

PendingIntent deliveryPI=PendingIntent.getBroadcast(this, 0, deliverIntent, 0);

sms.sendTextMessage(num, null, msg, sentPI, deliveryPI);

}

//实现注册的 广播服务

private BroadcastReceiver sendMsg =new BroadcastReceiver(){

@Override

public void onReceive(Context context, Intent intent) {

if(getResultCode()==Activity.RESULT_OK){

Toast.makeText(context, "发送成功!", Toast.LENGTH_LONG).show();

}else{

Toast.makeText(context, "发送失败!", Toast.LENGTH_LONG).show();

}

}

};

private BroadcastReceiver delivery=new BroadcastReceiver(){

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

Toast.makeText(context, "接收完成!", Toast.LENGTH_LONG).show();

}

};

//取消注册

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

unregisterReceiver(sendMsg);

unregisterReceiver(delivery);

unregisterReceiver(smsbr);

}

//短信接收监听器

class SmsBroadcastReceiver extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

Object [] pdus=(Object[]) intent.getExtras().get("pdus");

for(Object o:pdus){

byte[] data=(byte[]) o;

//

SmsMessage sm=SmsMessage.createFromPdu(data);

String sender=sm.getOriginatingAddress();

String content=sm.getMessageBody();

//拦截短信中含有 gpsl的短信

if(content.contains("gpsl")){

this.abortBroadcast();

SmsManager smg=SmsManager.getDefault();

smg.sendTextMessage(sender, null, getLoaction(), null, null);

}

}

}

}

@Override

protected void onStop() {

// TODO Auto-generated method stub

super.onStop();

locationManager.removeUpdates(locationListener);

Log.e("msg", "定位监听器停止工作!");

}

@Override

protected void onRestart() {

// TODO Auto-generated method stub

super.onRestart();

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);

Log.e("msg", "定位监听器复位!");

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类