你的位置:首页 > 操作系统

[操作系统]android 获取GPS定位


AndroidManifest.

<??><manifest ="http://schemas.android.com/apk/res/android"  package="com.example.yanlei.yl5" >  <uses-permission android:name="android.permission.READ_CONTACTS"/>  <uses-permission android:name="android.permission.WRITE_CONTACTS"/>  <uses-permission android:name="android.permission.VIBRATE"/>  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  <uses-permission android:name="android.permission.SET_WALLPAPER"/>  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  <uses-permission android:name="android.permission.SEND_SMS"/>  <uses-permission android:name="android.permission.RECEIVE_SMS"/>  <uses-permission android:name="android.permission.RECEIVE_MMS"/>  <uses-permission android:name="android.permission.WRITE_SMS"/>  <uses-permission android:name="android.permission.READ_SMS"/>  <uses-permission android:name="android.permission.NFC"/>  <uses-permission android:name="android.permission.TRANSMIT_IR"/>  <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  <!-- For android.media.audiofx.Visualizer -->  <uses-permission android:name="android.permission.RECORD_AUDIO"/>  <!-- We will request access to the camera, saying we require a camera of some sort but not one with autofocus capability. -->  <uses-permission android:name="android.permission.CAMERA"/>    <!-- 连接<a href="http://www.it165.net/news/nhlw/" target="_blank" >互联网</a>Internet权限 -->  <uses-permission android:name="android.permission.INTERNET" />  <!-- GPS定位权限 -->  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  <application    android:allowBackup="true"    android:icon="@mipmap/ic_launcher"    android:label="@string/app_name"    android:theme="@style/AppTheme" >    <activity      android:name=".MainActivity"      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></manifest>

activity_main.

<LinearLayout ="http://schemas.android.com/apk/res/android"  ="http://schemas.android.com/tools"  android:id="@+id/layout"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:background="@android:color/white"  android:orientation="vertical" >  <TextView    android:id="@+id/tv"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="经纬度信息:"    android:textColor="#660000"    android:textSize="20sp" /></LinearLayout>

MainActivity.java

package com.example.yanlei.yl5;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.provider.Settings;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;//import java.util.logging.Handler;public class MainActivity extends AppCompatActivity {  private static final String TAG = MainActivity.class.getSimpleName();  private double latitude = 0.0;  private double longitude = 0.0;  private TextView info;  private LocationManager locationManager;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    //requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);    setContentView(R.layout.activity_main);    info = (TextView) findViewById(R.id.tv);    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {      getLocation();      //gps已打开    } else {      toggleGPS();      new Handler() {}.postDelayed(new Runnable() {        @Override        public void run() {          getLocation();        }      }, 2000);    }  }  private void toggleGPS() {    Intent gpsIntent = new Intent();    gpsIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");    gpsIntent.addCategory("android.intent.category.ALTERNATIVE");    gpsIntent.setData(Uri.parse("custom:3"));    try {      PendingIntent.getBroadcast(this, 0, gpsIntent, 0).send();    } catch (PendingIntent.CanceledException e) {      e.printStackTrace();      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener);      Location location1 = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);      if (location1 != null) {        latitude = location1.getLatitude(); // 经度        longitude = location1.getLongitude(); // 纬度      }    }  }  private void getLocation() {    Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);    if (location != null) {      latitude = location.getLatitude();      longitude = location.getLongitude();    } else {      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);    }    info.setText("纬度:" + latitude + "\n" + "经度:" + longitude);  }  LocationListener locationListener = new LocationListener() {    // Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数    @Override    public void onStatusChanged(String provider, int status, Bundle extras) {    }    // Provider被enable时触发此函数,比如GPS被打开    @Override    public void onProviderEnabled(String provider) {      Log.e(TAG, provider);    }    // Provider被disable时触发此函数,比如GPS被关闭    @Override    public void onProviderDisabled(String provider) {      Log.e(TAG, provider);    }    // 当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发    @Override    public void onLocationChanged(Location location) {      if (location != null) {        Log.e("Map", "Location changed : Lat: " + location.getLatitude() + " Lng: " + location.getLongitude());        latitude = location.getLatitude(); // 经度        longitude = location.getLongitude(); // 纬度      }    }  };   // 打开和关闭gps第二种方法   private void openGPSSettings() {    //获取GPS现在的状态(打开或是关闭状态)    boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER);    if (gpsEnabled) {      //关闭GPS      Settings.Secure.setLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER, false);    } else {      //打开GPS      Settings.Secure.setLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER, true);    }  }  @Override  public boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.menu_main, menu);    return true;  }  @Override  public boolean onOptionsItemSelected(MenuItem item) {    // Handle action bar item clicks here. The action bar will    // automatically handle clicks on the Home/Up button, so long    // as you specify a parent activity in AndroidManifest.    int id = item.getItemId();    //noinspection SimplifiableIfStatement    if (id == R.id.action_settings) {      return true;    }    return super.onOptionsItemSelected(item);  }}