一、简单介绍:
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名称 } }
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名称 } }
需要在AndroidManifest中增加访问的最佳权限
注:这里需要手动打开虚拟机app中的定位:Settings——>Apps¬ifications——>个人项目——>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名称 } }
同方法二一样增加网络权限
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>