GPS

作者: 故江 | 来源:发表于2019-06-19 17:13 被阅读0次
    https://github.com/westlifeChen/GPS-Demo
    https://blog.csdn.net/tdstds/article/details/50517515
    https://www.kancloud.cn/alex_wsc/android-wifi-nfc-gps/414153
    https://www.cnblogs.com/ljf181275034/articles/3238087.html
    <!-- 网络权限和GPS权限 -->
        <!-- 连接互联网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" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    
    
    import android.Manifest;
    import android.content.Context;
    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.location.LocationProvider;
    import android.support.v4.app.ActivityCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.io.IOException;
    import java.util.List;
    import java.util.Locale;
    
    public class MainActivity extends AppCompatActivity {
    
        private TextView mLocationone;
        private TextView mLocationtwo;
        private Context context;
        String latLongString;
        String placename="";
        List<Address> places=null;
        private double longitude;
        private double latitude;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            context = this;
            /*if (Build.VERSION.SDK_INT > 22) {
                checkPermission();
                initView();
            }*/
            initView();
        }
    
        private void checkPermission() {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 200);
            }
            return;
        }
    
        private void initView() {
            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.
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE}, 200);
                Log.e("11111111", "已经获取到权限");
                return;
            }
    
            mLocationone = findViewById(R.id.location_one);
            mLocationtwo = findViewById(R.id.location_two);
    
            //获取LocationManager
            LocationManager lManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            Log.e("11111111", "lManager" + lManager);
            Criteria criteria = new Criteria();
            Log.e("11111111", "criteria:" + criteria);
            criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
            criteria.setAltitudeRequired(false);//不要求海拔
            criteria.setBearingRequired(false);//不要求方位
            criteria.setCostAllowed(false);//允许有花费
            criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
    
            lManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 5, new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    if (location != null) {
                        //经度
                        longitude = location.getLongitude();
                        //纬度
                        latitude = location.getLatitude();
                        //海拔
                        double altitude = location.getAltitude();
                        Log.e("11111111", longitude + "    " + latitude);
                        mLocationone.setText("经度:==>" + longitude + "\n纬度:==>" + latitude);
                        Log.e("有GPS信息", "经度:==>" + longitude + " \n 纬度==>" + latitude);
                        Log.e("获取的位置11111111",location.toString()+"    1111");
    
                        Geocoder geocoder = new Geocoder(MainActivity.this,Locale.getDefault());
                        try {
                            places = geocoder.getFromLocation(latitude, longitude, 5);
                            Toast.makeText(MainActivity.this, places.size() + "", Toast.LENGTH_LONG).show();
                            Log.e("11111111","    "+places.toString());
                        } catch (IOException e) {
                            e.printStackTrace();
                            Log.e("11111111","    "+places.toString());
                        }
    
                        if (places != null && places.size() > 0) {
                            // placename=((Address)places.get(0)).getLocality();
                            Log.e("11111111",places.get(0).getLocality()+"");
                            //一下的信息将会具体到某条街
                            //其中getAddressLine(0)表示国家,getAddressLine(1)表示精确到某个区,getAddressLine(2)表示精确到具体的街
                            for (int i = 0; i < places.size(); i++) {
                                placename = places.get(0).getAddressLine(0) + ", " + System.getProperty("line.separator")
                                        + places.get(0).getAddressLine(1) + ", "
                                        + places.get(0).getAddressLine(2);
                            }
                        }
                        latLongString = "纬度:" + latitude + "/n经度:" + longitude;
                        Toast.makeText(MainActivity.this, placename, Toast.LENGTH_LONG).show();
                        mLocationtwo.setText("当前位置"+placename);
                    } else {
                        Log.e("没有GPS信息", "没有GPS信息");
                    }
                }
    
                @Override
                public void onStatusChanged(String s, int i, Bundle bundle) {
                    switch (i) {
                        case LocationProvider.AVAILABLE:
                            Toast.makeText(context, "当前GPS为可用状态!", Toast.LENGTH_SHORT).show();
                            break;
                        case LocationProvider.OUT_OF_SERVICE:
                            Toast.makeText(context, "当前GPS不在服务内", Toast.LENGTH_SHORT).show();
                            break;
                        case LocationProvider.TEMPORARILY_UNAVAILABLE:
                            Toast.makeText(context, "当前GPS为暂停服务状态", Toast.LENGTH_SHORT).show();
                            break;
                    }
                }
    
                @Override
                public void onProviderEnabled(String s) {
                    Toast.makeText(context, "GPS开启了", Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onProviderDisabled(String s) {
                    Toast.makeText(context, "GPS关闭了", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
    
    <TextView
            android:id="@+id/location_one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#000"/>
        <TextView
            android:id="@+id/location_two"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#000"/>
    

    相关文章

      网友评论

          本文标题:GPS

          本文链接:https://www.haomeiwen.com/subject/irakqctx.html