Android獲取手機定位坐標


一、定位授權

在AndroidManifest.xml中添加以下代碼

<!--網絡權限-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--模糊定位權限:一般用於網絡定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!--精確定位權限:一般用於gps定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

完整的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.itcast.g">

    <!--網絡權限-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--模糊定位權限:一般用於網絡定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!--精確定位權限:一般用於gps定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

二、在MainActivity.java中編寫方法getLocation()、updateLocation()

package cn.itcast.g;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.nfc.Tag;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;


public class MainActivity extends AppCompatActivity {


    private TextView text;

    private Button btn;

    // 定義LocationManager對象
    private LocationManager locationManager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
    }

    private void initData() {

        /*文本對象*/
        text = (TextView) findViewById(R.id.text);

        /*按鈕對象*/
        btn = (Button) findViewById(R.id.btn);
    
        btn.setOnClickListener(this);

    }


    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn:
                //開啟定位
                getLocation();
                break;

        }
    }


   
   


    /* 獲取定位方法 */
    public void getLocation() {
        //1.獲取系統LocationManager服務
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_COARSE);//低精度,中精度高精度獲取不到location。
        criteria.setAltitudeRequired(false);//不要求海拔
        criteria.setBearingRequired(false);//不要求方位
        criteria.setCostAllowed(true);//允許有花費
        criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗

        String locationProvider = locationManager.getBestProvider(criteria, true);
        if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            Log.d(null, "onCreate: 沒有權限 ");
            return;
        }
        //2.獲取GPS最近的定位信息
        Location location = locationManager.getLastKnownLocation(locationProvider);

        //3.將location里面的位置信息展示在edittext中
        updateLocation(location);
        //4.設置沒兩秒獲取一次GPS的定位信息
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 0, new LocationListener() {
            @Override
            public void onLocationChanged(@NonNull Location location) {
                //當GPS定位信息發生改變時,更新位置
                updateLocation(location);
            }

            @Override
            public void onProviderEnabled(@NonNull String provider) {
                //當GPS LocationProvider可用時,更新位置
            }

            @Override
            public void onProviderDisabled(@NonNull String provider) {
                updateLocation(null);
            }
        });
    }

    private void updateLocation(Location location) {
        if (location != null) {
            StringBuffer sb = new StringBuffer();
            sb.append("實時的位置信息:\n經度:");
            sb.append(location.getLongitude());
            sb.append("\n緯度:");
            sb.append(location.getLatitude());
            sb.append("\n高度:");
            sb.append(location.getAltitude());
            sb.append("\n速度:");
            sb.append(location.getSpeed());
            sb.append("\n方向:");
            sb.append(location.getBearing());
            sb.append("\n精度:");
            sb.append(location.getAccuracy());
            text.setText(sb.toString());
        } else {
            // 如果傳入的Location對象為空則清空EditText
            text.setText("");
        }
    }
}

三、XML頁面代碼

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
      <TextView
        android:id="@+id/text"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="28dp"
        android:layout_marginTop="0dp"
        android:textColor="#000"
        android:text="暫無定位"
        app:layout_constraintLeft_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="MissingConstraints" />

      <Button
        android:id="@+id/btn"
        android:layout_width="120dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="600dp"
        android:text="開始定位"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.096"
        app:layout_constraintStart_toStartOf="parent"
        tools:ignore="MissingConstraints" />


</androidx.constraintlayout.widget.ConstraintLayout>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM