Androidは原生APiで位置の経緯度を取得
47305 ワード
Androidが原生APiで位置の経緯度を取得することを紹介した.シーン:ユーザーappのホームページを追加した後、ユーザーの緯度を1つのインタフェースを通じてサービス側に戻し、サーバーを正確に位置決めすることができます.
ステップ分析:権限の問題:Android 6.0以降にダイナミック権限が追加されましたが、緯度座標を取得する権限を取得appの(TargetVersion>=23)場合はダイナミック取得が必要です(もちろんリストファイルにも設定しなければなりません) コード実装(詳細は後述) 一、権限構成インベントリファイル権限 2権限申請コード
二、工具類
三、完全なコード
以上が本文のすべての内容で、みんなの学习に対して役に立つことを望みます
ステップ分析:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
public class MainActivity extends AppCompatActivity {
private static final int LOCATION_CODE = 1;
private LocationManager lm;//
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
//
GPSQunaxian();
}
/**
*
*/
public void GPSQunaxian(){
lm = (LocationManager) MainActivity.this.getSystemService(MainActivity.this.LOCATION_SERVICE);
boolean ok = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (ok) {//
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
Log.d("kly"," ");
// , 。
// 。
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_CODE);
//Toast.makeText(getActivity(), " ", Toast.LENGTH_SHORT).show();
} else {
// , 。
//Toast.makeText(getActivity(), " ", Toast.LENGTH_SHORT).show();
}
} else {
Log.d("kly","d GPS ");
Toast.makeText(MainActivity.this, " GPS ", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, 1315);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case LOCATION_CODE: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 。
} else {
// 。
Toast.makeText(MainActivity.this, " , !",Toast.LENGTH_LONG).show();
}
}
}
}
}
二、工具類
package com.gentek.tianlin12.utils;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
import java.util.List;
/**
* Created by Administrator on 2018/4/17.
*
*/
public class GPSUtils {
private static GPSUtils instance;
private LocationManager locationManager;
private String locationProvider;
private Location location;
private Context mContext;
private GPSUtils(Context context) {
this.mContext = context;
getLocation();
}
public static GPSUtils getInstance(Context context) {
if (instance == null) {
synchronized (GPSUtils.class) {
if (instance == null) {
instance = new GPSUtils(context);
}
}
}
return instance;
}
private void getLocation() {
//1.
locationManager = (LocationManager) mContext.getSystemService( Context.LOCATION_SERVICE );
//2. ,GPS NetWork
List<String> providers = locationManager.getProviders( true );
if (providers.contains( LocationManager.NETWORK_PROVIDER )) {
//
Log.d( "kly", " " );
locationProvider = LocationManager.NETWORK_PROVIDER;
} else if (providers.contains( LocationManager.GPS_PROVIDER )) {
// GPS
Log.d( "kly", " GPS " );
locationProvider = LocationManager.GPS_PROVIDER;
} else {
Log.d( "kly", " " );
return;
}
// , , , 。 code 。
if (Build.VERSION.SDK_INT >= 23 &&
ActivityCompat.checkSelfPermission( mContext, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission( mContext, Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED) {
return;
}
//3. , , null
Location location = locationManager.getLastKnownLocation( locationProvider );
if (location != null) {
setLocation( location );
}else {
Log.d("kly","location=null");
}
// , minTime minDistace
locationManager.requestLocationUpdates( locationProvider, 0, 0, locationListener );
}
private void setLocation(Location location) {
this.location = location;
String address = " :" + location.getLatitude() + " :" + location.getLongitude();
Log.d( "kly", "address"+address );
}
//
public Location showLocation() {
return location;
}
//
public void removeLocationUpdatesListener() {
// ,
if (Build.VERSION.SDK_INT >= 23 &&
ActivityCompat.checkSelfPermission( mContext, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission( mContext, Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED) {
return;
}
if (locationManager != null) {
instance = null;
locationManager.removeUpdates( locationListener );
}
}
/**
* LocationListern
* : 、 、 、LocationListener
*/
LocationListener locationListener = new LocationListener() {
/**
*
*/
@Override
public void onStatusChanged(String provider, int status, Bundle arg2) {
}
/**
*
*/
@Override
public void onProviderEnabled(String provider) {
}
/**
*
*/
@Override
public void onProviderDisabled(String provider) {
}
/**
*
*/
@Override
public void onLocationChanged(Location location) {
location.getAccuracy();//
setLocation(location);
}
};
}
三、完全なコード
public class MainActivity extends AppCompatActivity {
private static final int LOCATION_CODE = 1;
private LocationManager lm;//
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
//
GPSQunaxian();
Location location = GPSUtils.getInstance( MainActivity.this ).showLocation();
if (location != null) {
String address = " :" + location.getLatitude() + " :" + location.getLongitude();
Log.d( "kly",address );
Toast.makeText(MyApplication.getContext(),address,Toast.LENGTH_SHORT).show();
}
}
/**
*
*/
public void GPSQunaxian(){
lm = (LocationManager) MainActivity.this.getSystemService(MainActivity.this.LOCATION_SERVICE);
boolean ok = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (ok) {//
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
Log.d("kly"," ");
// , 。
// 。
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_CODE);
//Toast.makeText(getActivity(), " ", Toast.LENGTH_SHORT).show();
} else {
// , 。
//Toast.makeText(getActivity(), " ", Toast.LENGTH_SHORT).show();
}
} else {
Log.d("kly","d GPS ");
Toast.makeText(MainActivity.this, " GPS ", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, 1315);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case LOCATION_CODE: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 。
} else {
// 。
Toast.makeText(MainActivity.this, " , !",Toast.LENGTH_LONG).show();
}
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
GPSUtils.getInstance( this ).removeLocationUpdatesListener();
}
}
以上が本文のすべての内容で、みんなの学习に対して役に立つことを望みます