注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

widebright的个人空间

// 编程和生活

 
 
 

日志

 
 

Android GPS应用获取地理位置  

2012-01-21 01:15:25|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一直觉得GPS获取地址位置比较有意思,最近终于有时间试了一下。看看了android sdk的说明,和在网上找了下资料,看起来还是很简单的。传上手机试了一下,终于可以了,可以用来测量我家和广州的距离是多远了呵呵!不过有一个地方不知道怎么改善,我看QQ里面的获取附近地理位置的那里拿地理位置的时候,我手机里面的地点安全选项没开放他也是可以用的,但按照我下面这个办法禁用了设置的话,就不行了。难道他们用的什么hack的办法? 先不管了。

Android GPS应用获取地理位置 - widebright - widebright的个人空间
 



package widebright.GPS;

 

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

import android.location.LocationProvider;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Spinner;

import android.widget.TextView;

 

public class GPS extends Activity implements OnClickListener {

private Spinner spinner01;

private TextView textView01;

    private EditText editText_x1;

    private EditText editText_y1;

    private EditText editText_x2;

    private EditText editText_y2;

    private EditText editText_dinstace;

    private Button button01;

    private Button button02;

    private Button button03;

    private Button button_exit;

    

    private String locationProvider = LocationManager.NETWORK_PROVIDER;

    LocationListener locationListener;

    int clickedButton = R.id.Button01;

    

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);                

        

        spinner01 = (Spinner)findViewById(R.id.Spinner01); 

        textView01 = (TextView)findViewById(R.id.TextView01); 

        //textView01.setText("数据来源:"); 

        editText_x1 =(EditText)findViewById(R.id.EditText_x1);

        editText_y1 =(EditText)findViewById(R.id.EditText_y1);

        editText_x2 =(EditText)findViewById(R.id.EditText_x2);

        editText_y2 =(EditText)findViewById(R.id.EditText_y2);

        editText_dinstace =(EditText)findViewById(R.id.EditText_distance);

        button01 = (Button)findViewById(R.id.Button01);

        button02 = (Button)findViewById(R.id.Button02);

        button03 = (Button)findViewById(R.id.Button03);

        button_exit = (Button)findViewById(R.id.Button_exit);

        button01.setOnClickListener(this);

        button02.setOnClickListener(this);

        button03.setOnClickListener(this);

        button_exit.setOnClickListener(this);        

        

        //初始化下拉列表项

        final ArrayAdapter< String> adapter = new ArrayAdapter< String>(  this,  android.R.layout.simple_spinner_item); 

        adapter.setDropDownViewResource( android.R.layout.select_dialog_singlechoice); //simple_spinner_dropdown_item

        String list[]={"基站或者wifi热点定位","GPS卫星定位"};

        for(int i=0;i<list.length;i++)

        {

         adapter.add(list[i]);      

        }               

        spinner01.setAdapter(adapter); 

        spinner01.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){                

            @Override

            public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {

            String text =  adapter.getItem(arg2);

            if (text.startsWith("GPS")) {

            locationProvider = LocationManager.GPS_PROVIDER;

               //textView01.setText("数据来源:GPS卫星定位"); 

            } else {            

            locationProvider = LocationManager.NETWORK_PROVIDER;

               //textView01.setText("数据来源:基站定位"); 

            }

            }

            @Override

            public void onNothingSelected(AdapterView<?> arg0) {                   

                    

            }

        });   

        

        //初始化GPS监听

        locationListener = new LocationListener() {

 

@Override

public void onLocationChanged(Location location) {    

removeLocationListener();

}

 

@Override

public void onProviderDisabled(String provider) {

removeLocationListener();

}

 

@Override

public void onProviderEnabled(String provider) {

}

 

@Override

public void onStatusChanged(String provider, int status,

Bundle extras) {

}

       

       

        };

        

     }

    

private Location getLocation() {

LocationManager locationManager = (LocationManager) this

.getSystemService(Context.LOCATION_SERVICE);

Location lastKnownLocation = null;

if (locationProvider.equals(LocationManager.GPS_PROVIDER)) {

try {

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

lastKnownLocation = locationManager

.getLastKnownLocation(LocationManager.GPS_PROVIDER);

if (lastKnownLocation == null) {

editText_dinstace.setText("GPS定位功能被禁用!");

}

} catch (IllegalArgumentException e) {

editText_dinstace.setText("GPS定位来源不存在!");

} catch (SecurityException e) {

editText_dinstace.setText("GPS定位 没有权限!");

}

 

} else {

try {

//请求刷新数据

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1, locationListener); 

//getLastKnownLocation有可能是很久以前的数据,或者根本没有数据,等其他的Google Map里面更新了以后才有

lastKnownLocation = locationManager

.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

if (lastKnownLocation == null) {

editText_dinstace.setText("基站定位功能被禁用!");

}

} catch (IllegalArgumentException e) {

editText_dinstace.setText("基站定位来源不存在!");

} catch (SecurityException e) {

editText_dinstace.setText("基站定位 没有权限!");

}

}

 

return lastKnownLocation;

}

    private void fillLocation( Location location) 

    {

       if ( location == null) return;

    if (R.id.Button01 == clickedButton) {  //第一点

    //纬度

    editText_x1.setText(String.valueOf(location.getLatitude()));

    //经度

    editText_y1.setText(String.valueOf(location.getLongitude()));

    } else {   //第二点

    //纬度

    editText_x2.setText(String.valueOf(location.getLatitude()));

    //经度

    editText_y2.setText(String.valueOf(location.getLongitude()));        

    }    

   

    }

private void removeLocationListener() {

LocationManager locationManager = (LocationManager) this

.getSystemService(Context.LOCATION_SERVICE);

super.onPause(); locationManager.removeUpdates(locationListener); 

}

    @Override

    protected void onStart() {

        super.onStart();

        // The activity is about to become visible.

    }

    @Override

    protected void onResume() {

        super.onResume();

        // The activity has become visible (it is now "resumed").

        // 如果想程序重新启动时可以收到gps位置更新,需要再这里重新添加 locationListener

        //locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1, locationListener); 

    }

 

@Override protected void onPause() {

super.onPause();

// Another activity is taking focus (this activity is about to be "paused").

removeLocationListener();

}

    @Override

    protected void onStop() {

        super.onStop();

        // The activity is no longer visible (it is now "stopped")

        removeLocationListener();

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

        // The activity is about to be destroyed.

        removeLocationListener();

    }

    @Override

public void onClick(View v) {

 

   switch (v.getId()) {

 

   case R.id.Button01:

   {

    clickedButton = R.id.Button01;

    Location location = this.getLocation();

    fillLocation(location);   

    break;

   }

   case R.id.Button02:

   {

    clickedButton = R.id.Button02;

    Location location = this.getLocation();

    fillLocation(location);

             break;

   }

case R.id.Button03:

{

float[] results = new float[1];

try {

Double startLatitude = Double.parseDouble(editText_x1.getText()

.toString());

Double startLongitude = Double.parseDouble(editText_y1

.getText().toString());

Double endLatitude = Double.parseDouble(editText_x2.getText()

.toString());

Double endLongitude = Double.parseDouble(editText_y2.getText()

.toString());

Location.distanceBetween(startLatitude, startLongitude,

endLatitude, endLongitude, results);

editText_dinstace.setText("两地相距" + String.valueOf(results[0])

+ "米");

} catch (NumberFormatException e) {

editText_dinstace.setText("两个地点的经纬度浮点数值都要合法才行!");

}    

             break;   

}

case R.id.Button_exit: 

{

android.os.Process.killProcess(android.os.Process.myPid());

//System.exit(0);

break;

}

        default:

        break;

   }

}

}

=================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="widebright.GPS"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name="GPS"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
<uses-sdk android:minSdkVersion="7" />      ///加了这个,在我的手机上显示权限才正常,不然显示多几个不知道怎么回事
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

</manifest> 
=====================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />

<LinearLayout android:id="@+id/LinearLayout04"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<TextView android:text="数据来源: " android:id="@+id/TextView01"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical">
</TextView>
<Spinner android:id="@+id/Spinner01" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_weight="1"></Spinner>
</LinearLayout>



<LinearLayout android:id="@+id/LinearLayout04"
android:layout_width="fill_parent" android:layout_height="wrap_content">

<TableLayout android:id="@+id/TableLayout01"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1">
<TableRow>
<TextView android:text="纬度: " android:id="@+id/TextView02"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:text="" android:id="@+id/EditText_x1"
android:layout_height="wrap_content" android:singleLine="true" android:layout_weight="1"
android:layout_width="wrap_content"></EditText>
</TableRow>
<TableRow>
<TextView android:text="经度:  " android:id="@+id/TextView03"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:text="" android:id="@+id/EditText_y1"
android:layout_height="wrap_content" android:singleLine="true" android:layout_weight="1"
android:layout_width="wrap_content"></EditText>
</TableRow>
</TableLayout>

<Button android:id="@+id/Button01" android:layout_width="wrap_content"
android:text="定位地点1" android:layout_height="wrap_content"></Button>

</LinearLayout>


<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent" android:layout_height="wrap_content">


<TableLayout android:id="@+id/TableLayout02"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1">
<TableRow>
<TextView android:text="纬度: " android:id="@+id/TextView04"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:text="" android:id="@+id/EditText_x2"
android:layout_height="wrap_content" android:singleLine="true" android:layout_weight="1"
android:layout_width="wrap_content"></EditText>
</TableRow>
<TableRow>

<TextView android:text="经度: " android:id="@+id/TextView05"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:text="" android:id="@+id/EditText_y2"
android:layout_height="wrap_content" android:singleLine="true" android:layout_weight="1"
android:layout_width="wrap_content"></EditText>
</TableRow>
</TableLayout>


<Button android:text="定位地点2 " android:id="@+id/Button02"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>


<LinearLayout android:id="@+id/LinearLayout03" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal">

<EditText android:text="" android:id="@+id/EditText_distance"
android:layout_height="wrap_content" android:singleLine="true"
android:layout_width="wrap_content"  android:layout_weight="1"></EditText>
<Button android:text="计算两点距离" android:id="@+id/Button03"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:singleLine="true"></Button>

</LinearLayout>

<Button android:text="关闭应用" android:id="@+id/Button_exit"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:singleLine="true"></Button>


</LinearLayout>
  评论这张
 
阅读(871)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017