zoukankan      html  css  js  c++  java
  • 获取LocationProvider

    一、简单介绍:

    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()+"
    ");
            }
                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()+"
    ");
            }
                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()+"
    ");
            }
                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
  • 相关阅读:
    IntelliJ Idea 2017 免费激活方法
    RabbitMq、ActiveMq、ZeroMq、kafka之间的比较
    Oracle锁的机制
    序列化和持久化的区别
    Hibernate框架之get和load方法的区别
    Hibernate框架之入门案例
    Oracle添加数据报文字与格式字符串不匹配错误
    Linux设备驱动程序 之 异步通知
    Linux设备驱动程序 之 poll和select
    Linux设备驱动程序 之 休眠
  • 原文地址:https://www.cnblogs.com/hhjing/p/12560759.html
Copyright © 2011-2022 走看看