一、简单介绍:

 

LocationProvider是位置源的意思,用于提供定位信息。

        1. gps手机芯片通过卫星获取定位信息 

        2.network通过网络手机基站和wifi地址大致定位 

        3. passive被动定位方式

二、方法:

1.获取所有可用的LocationProvider

   使用LocationManager对象的getAllProviders()方法

public class MainActivity extends AppCompatActivity {

    private TextView textView;//定义用于显示LocationProvider名称的TextView组件

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示
        textView=(TextView)findViewById(R.id.provider);    //获取显示LocationProvider名称的TextView组件

        LocationManager locationManager=(LocationManager)getSystemService(LOCATION_SERVICE);
        List<String> providerbuilderNames=locationManager.getAllProviders();//获取所有的LocationProvider名称
        StringBuilder stringBuilder=new StringBuilder();//字符串构建器
        //通过for循环进行遍历
        for(Iterator<String>iterator=providerbuilderNames.iterator();iterator.hasNext();){
            stringBuilder.append(iterator.next()+"\n");
        }
            textView.setText(stringBuilder.toString());//显示获得的LocationProvider名称
    }
}
View Code

2.通过名称获得LocationProvider

使用LocationManager对象的getProviders()方法

package com.example.myself;

import androidx.appcompat.app.AppCompatActivity;

import android.location.Location;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.view.WindowManager;
import android.widget.TextView;

import java.util.Iterator;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private TextView textView;//定义用于显示LocationProvider名称的TextView组件

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示
        textView=(TextView)findViewById(R.id.provider);    //获取显示LocationProvider名称的TextView组件

        LocationManager locationManager=(LocationManager)getSystemService(LOCATION_SERVICE);
/*      List<String> providerbuilderNames=locationManager.getAllProviders();//获取所有的LocationProvider名称
          StringBuilder stringBuilder=new StringBuilder();//字符串构建器
        //通过for循环进行遍历
        for(Iterator<String>iterator=providerbuilderNames.iterator();iterator.hasNext();){
            stringBuilder.append(iterator.next()+"\n");
        }
            textView.setText(stringBuilder.toString());//显示获得的LocationProvider名称
*/
        //获取基于GPS的LocationProvider
        LocationProvider locationProvider=locationManager.getProvider(LocationManager.GPS_PROVIDER);//获取基于GPS的LocationProvider
        textView.setText(locationProvider.getName());//获取LocationProvider名称
    }
}
View Code

需要在AndroidManifest中增加访问的最佳权限

注:这里需要手动打开虚拟机app中的定位:Settings——>Apps&notifications——>个人项目——>Permissions——>Location——>允许打开定位

 3.通过Criteria类获得LocationProvider

package com.example.myself;

import androidx.appcompat.app.AppCompatActivity;

import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.view.WindowManager;
import android.widget.TextView;

import java.util.Iterator;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private TextView textView;//定义用于显示LocationProvider名称的TextView组件

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示
        textView=(TextView)findViewById(R.id.provider);    //获取显示LocationProvider名称的TextView组件

        LocationManager locationManager=(LocationManager)getSystemService(LOCATION_SERVICE);

        //方法一:
/*      List<String> providerbuilderNames=locationManager.getAllProviders();//获取所有的LocationProvider名称
          StringBuilder stringBuilder=new StringBuilder();//字符串构建器
        //通过for循环进行遍历
        for(Iterator<String>iterator=providerbuilderNames.iterator();iterator.hasNext();){
            stringBuilder.append(iterator.next()+"\n");
        }
            textView.setText(stringBuilder.toString());//显示获得的LocationProvider名称
*/

        //方法二:
        //获取基于GPS的LocationProvider
       /* LocationProvider locationProvider=locationManager.getProvider(LocationManager.GPS_PROVIDER);//获取基于GPS的LocationProvider
        textView.setText(locationProvider.getName());//获取LocationProvider名称
        */

       //方法三:
       //获取最佳的LocationProvider
        Criteria criteria=new Criteria();//创建一个过滤条件对象
        criteria.setCostAllowed(false);//不收费的
        criteria.setAccuracy(Criteria.ACCURACY_HIGH);//使用精度最准确的
        criteria.setPowerRequirement(Criteria.POWER_LOW);//使用耗电量最低的
        String provider=locationManager.getBestProvider(criteria,true);//获取最佳的LocationProvider名称
        textView.setText(provider);//显示获取的最佳LocationProvider名称
    }
}
View Code

同方法二一样增加网络权限

 activity_xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="16dp"
    android:paddingRight="64dp"
    android:paddingLeft="64dp"
    android:paddingBottom="16dp"
    android:background="@drawable/blue"
    tools:context=".MainActivity">

    //获取显示信息
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="26sp"
        android:textColor="#000000"
        android:textStyle="bold"
        android:layout_above="@+id/provider"
        android:text="可用LocationProvider"/>

    //获取提示结果
    <TextView
        android:id="@+id/provider"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:lineSpacingExtra="5dp"
        android:layout_centerHorizontal="true"
        android:textSize="26sp"
        android:textStyle="bold"/>



</RelativeLayout>
View Code

 

posted on 2020-03-24 19:33  阡陌祁画  阅读(639)  评论(0编辑  收藏  举报