1. 程式人生 > >利用手機的GPS獲取經緯度

利用手機的GPS獲取經緯度

package com.example.aman.whereami;

import android.Manifest;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import 
android.content.pm.PackageManager; import android.location.Address; import android.location.Criteria; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.net.Uri; import android.provider.Settings; import
android.support.v4.app.ActivityCompat; import android.support.v4.app.NotificationCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; 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; import java.io.IOException; import java.io.Serializable; import java.nio.Buffer; import java.util.List; import butterknife.ButterKnife; import butterknife.InjectView; public class Activity1 extends AppCompatActivity implements LocationListener { String TAG = Activity1.class.getSimpleName(); TextView txtLocation, result; LocationManager locationManager; double latitude, longitude; NotificationManager notificationManager; NotificationCompat.Builder builder; Notification notification; ProgressDialog progressDialog; void initViews() { txtLocation = (TextView) findViewById(R.id.textViewlocation); result = (TextView) findViewById(R.id.result); } void showNotification() { notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); builder = new NotificationCompat.Builder(this); builder.setContentTitle("Location "); builder.setContentText("Location is: " + latitude + " - " + longitude); builder.setSmallIcon(R.drawable.mapspink); builder.setDefaults(Notification.DEFAULT_ALL); notification = builder.build(); notificationManager.notify(420, notification); Intent intent = new Intent(Activity1.this, Activity2.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 222, intent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_1); initViews(); progressDialog = new ProgressDialog(this); progressDialog.setMessage("Loading.."); locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ locationManager = null; Toast.makeText(Activity1.this, "請開啟GPS開關", Toast.LENGTH_LONG).show(); Intent i = new Intent(); i.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(i); } locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this); locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); Toast.makeText(getApplicationContext(), "gps", Toast.LENGTH_LONG).show(); progressDialog.show(); } @Override public void onLocationChanged(Location location) { latitude = location.getLatitude(); longitude = location.getLongitude(); txtLocation.setText("Location is:" + latitude + "-" + longitude); try { Geocoder geocoder = new Geocoder(this); List<Address> adrslist = geocoder.getFromLocation(latitude, longitude, 5); if (adrslist != null && adrslist.size() > 0) { Address address = adrslist.get(0); StringBuffer buffer = new StringBuffer(); for (int i = 0; i < address.getMaxAddressLineIndex(); i++) { buffer.append(address.getAddressLine(i) + "\n"); } txtLocation.setText("Address:" + buffer.toString()); } } catch (IOException e) { e.printStackTrace(); } showNotification(); progressDialog.dismiss(); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. locationManager.removeUpdates(this); return; } locationManager.removeUpdates(this); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } }