GPS实时定位、获取基站信息

Android附近基站+Wifi+IP+GPS多渠道定位方案 本文主要介绍了使用使用基站+Wifi+IP+GPS多渠道定位的实现方案和相关的Android源码,主要包括Google service SDK的GPS获取方式,获取手机附近基站信息的相关Android API,扫描手机wifi环境的Android API,谷歌提供的基站+Wifi热点+IP定位 API的调用方法。并且阐述了多渠道定位结果的择优策略和省电策略。并且介绍了一下在开发这套功能期间碰到几个细节上的问题。力图构建一套准确完整的手机客户端地理位置解决方案 阅读详情

好久没有来更新我的博客了 , 最近刚做了一个GPS实时定位和获取基站信息的一个小的Demo ,这个辛酸泪啊~ 来给大家们来分享一下 !

做这个项目我用的是用的原始的手机GPS定位, 因为这个有可能需要在国外会用到,如果用国内第三方SDK的是用不了的,国外的第三方SDK的也需要翻墙什么的......不过用原始的还不错精确度还可以。


(网上的资料质量太水了)

下面给大家一些官方资料 :

基站相关资料

GPS资料


好啦不多说来看一下代码 :



package com.waywings.basestation.wy_terminal_basestation;

import android.annotation.TargetApi;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.CellIdentityCdma;
import android.telephony.CellIdentityGsm;
import android.telephony.CellIdentityLte;
import android.telephony.CellIdentityWcdma;
import android.telephony.CellInfo;
import android.telephony.CellInfoCdma;
import android.telephony.CellInfoGsm;
import android.telephony.CellInfoLte;
import android.telephony.CellInfoWcdma;
import android.telephony.CellLocation;
import android.telephony.CellSignalStrengthCdma;
import android.telephony.CellSignalStrengthGsm;
import android.telephony.CellSignalStrengthLte;
import android.telephony.CellSignalStrengthWcdma;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.waywings.basestation.wy_terminal_basestation.bean.CellInfoCdmaBean;
import com.waywings.basestation.wy_terminal_basestation.bean.CellInfoGsmBean;
import com.waywings.basestation.wy_terminal_basestation.bean.CellInfoLteBean;
import com.waywings.basestation.wy_terminal_basestation.bean.CellInfoWcdmaBean;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

public class BaseStationActivity extends AppCompatActivity {

    private TextView tipInfo, basestation_info;
    private LocationManager locationManager;
    private static final String TAG = "BaseStationActivity";
    private final static int INTERVAL_REFRESH = 1000;
    private ArrayList<String> PROVIDER_ARRAY;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base_station);
        initView();
        initLocationManager();
    }

    private void initLocationManager() {
        PROVIDER_ARRAY = new ArrayList<>();
        PROVIDER_ARRAY.add(LocationManager.GPS_PROVIDER);
        PROVIDER_ARRAY.add(LocationManager.NETWORK_PROVIDER);
        PROVIDER_ARRAY.add(LocationManager.PASSIVE_PROVIDER);
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        List<String> allProviders = locationManager.getAllProviders();
        Log.i("AlexLocation", "AllProviders  -> " + allProviders);
        if (allProviders != null) {
            for (String provider : allProviders) {
                Log.i("AlexLocation", "AllProviders  ->  provider => " + provider);
                if ((provider != null) && (PROVIDER_ARRAY.contains(provider))) {
                    if (LocationManager.GPS_PROVIDER.equals(provider)) {
                        //通过GPS获取位置
                        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, INTERVAL_REFRESH, 10, locationListener);
                    } else if (LocationManager.NETWORK_PROVIDER.equals(provider)) {
                        //通过网络获取位置
                        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, INTERVAL_REFRESH, 10, locationListener);
                    } else if (LocationManager.PASSIVE_PROVIDER.equals(provider)) {
                        //被动获取位置
                        locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, INTERVAL_REFRESH, 10, locationListener);
                    }
                }
            }
        }
    }

    private void initView() {
        tipInfo = (TextView) findViewById(R.id.tipInfo);
        basestation_info = (TextView) findViewById(R.id.basestation_info);
    }

    private LocationListener locationListener = new LocationListener() {
        //位置更改时调用
        @Override
        public void onLocationChanged(Location location) {
            if (location == null) return;
            showLocationInfo(location);
        }
        //当提供者状态更改时调用
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {

        }
        //当提供程序由用户启用时调用
        @Override
        public void onProviderEnabled(String provider) {

        }
        //当用户禁用提供程序时调用
        @Override
        public void onProviderDisabled(String provider) {

        }
    };

    /**
     * 显示当前设备的位置信息
     *
     * @param location
     */
    private void showLocationInfo(Location location) {
        // TODO Auto-generated method stub
        float accuracy = location.getAccuracy();//获取该位置的估计精度,以米为单位
        double altitude = location.getAltitude();//如果海拔高度在海拔高度,就可获得高度
        double longitude = location.getLongitude();//得到经度
        double latitude = location.getLatitude();//得到纬度
        float speed = location.getSpeed();//如果有可用的速度,以米/秒在地面上
        boolean b = location.hasAccuracy();//如果该位置具有精度,则为true

        String changeInfo = "\n时间:" + sdf.format(new Date())
                + "\n精度 : " + accuracy
                + "\n高度 : " + altitude
                + "\n经度 : " + longitude
                + "\n纬度 : " + latitude
                + "\n速度 : " + speed
                + "\n是否具有精度 : " + b;
        tipInfo.setText(changeInfo);


        Geocoder geocoder = new Geocoder(this, Locale.getDefault());
        List<Address> addressList = null;
        try {
            addressList = geocoder.getFromLocation(location.getAltitude(), location.getLongitude(), 1);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (addressList.size() <= 0 | addressList == null) return;
        Address address = addressList.get(0);
        //Log.i(TAG, "address =" + address);
        String countryName = address.getCountryName();//得到国家名称,比如:中国
        String locality = address.getLocality();//得到城市名称,比如:北京市
        Log.i(TAG, "\ncountryName = " + countryName + "\nlocality = " + locality);
        for (int i = 0; address.getAddressLine(i) != null; i++) {
            String addressLine = address.getAddressLine(i);//得到周边信息,包括街道等,i=0,得到街道名称
            Log.i(TAG, "addressLine = " + addressLine);
        }

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (locationManager != null) {
            // 关闭程序时将监听器移除
            locationManager.removeUpdates(locationListener);
        }
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    public void baseStation(View view) {

        TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        //返回设备的当前位置
        CellLocation cellLocation = mTelephonyManager.getCellLocation();
        List<CellInfo> CellInfo = mTelephonyManager.getAllCellInfo();
        StringBuffer stringBuffer = new StringBuffer("总数 : " + CellInfo.size() + "\n");

        CellInfoGsmBean gsmBean = new CellInfoGsmBean();
        CellInfoCdmaBean cdmaBean = new CellInfoCdmaBean();
        CellInfoLteBean lteBean = new CellInfoLteBean();
        CellInfoWcdmaBean wcdmaBean = new CellInfoWcdmaBean();
        basestation_info.setText("");
        if (cellLocation != null) {
            basestation_info.append(cellLocation.toString() + "\n");
        }

        for (CellInfo cellInfo : CellInfo) {
            stringBuffer.append(cellInfo.toString());
            //GSM手机信息
            if (cellInfo instanceof CellInfoGsm) {

                CellSignalStrengthGsm cellSignalStrength = ((CellInfoGsm) cellInfo).getCellSignalStrength();
                gsmBean.asuLevel = cellSignalStrength.getAsuLevel();
                gsmBean.dbm = cellSignalStrength.getDbm();
                gsmBean.level = cellSignalStrength.getLevel();


                CellInfoGsm cgsm = (CellInfoGsm) cellInfo;
                CellIdentityGsm cellIdentity = cgsm.getCellIdentity();
                gsmBean.cid = cellIdentity.getCid();
                gsmBean.lac = cellIdentity.getLac();
                gsmBean.mcc = cellIdentity.getMcc();
                gsmBean.mnc = cellIdentity.getMnc();

                basestation_info.append(gsmBean.toString() + "\n");
                Log.d(TAG, gsmBean.toString());
                //Log.d(TAG,"\nCID = " + cid + "\nLAC = " + lac + "\nMCC = " + mcc + "\nMNC = " + mnc);
            }
            //小区LTE
            if (cellInfo instanceof CellInfoLte) {
                CellSignalStrengthLte cellSignalStrength = ((CellInfoLte) cellInfo).getCellSignalStrength();
                lteBean.dbm = cellSignalStrength.getDbm();
                lteBean.asuLevel = cellSignalStrength.getAsuLevel();
                lteBean.timingAdvance = cellSignalStrength.getTimingAdvance();
                lteBean.level = cellSignalStrength.getLevel();

                CellIdentityLte cellIdentity = ((CellInfoLte) cellInfo).getCellIdentity();
                lteBean.mcc = cellIdentity.getMcc();
                lteBean.mnc = cellIdentity.getMnc();
                lteBean.ci = cellIdentity.getCi();
                lteBean.pci = cellIdentity.getPci();
                lteBean.tac = cellIdentity.getTac();

                basestation_info.append(lteBean.toString() + "\n");
                Log.d(TAG, lteBean.toString());
                Log.d(TAG, "\nmcc = " + lteBean.mcc + "\nmnc = " + lteBean.mnc + "\nci = " + lteBean.ci + "\npci = " + lteBean.pci);
            }
            //CDMA手机信息
            if (cellInfo instanceof CellInfoCdma) {
                CellSignalStrengthCdma cellSignalStrength = ((CellInfoCdma) cellInfo).getCellSignalStrength();
                cdmaBean.asuLevel = cellSignalStrength.getAsuLevel();
                cdmaBean.cdmaDbm = cellSignalStrength.getCdmaDbm();
                cdmaBean.cdmaEcio = cellSignalStrength.getCdmaEcio();
                cdmaBean.cdmaLevel = cellSignalStrength.getCdmaLevel();
                cdmaBean.dbm = cellSignalStrength.getDbm();
                cdmaBean.evdoDbm = cellSignalStrength.getEvdoDbm();
                cdmaBean.evdoEcio = cellSignalStrength.getEvdoEcio();
                cdmaBean.evdoLevel = cellSignalStrength.getEvdoLevel();
                cdmaBean.evdoSnr = cellSignalStrength.getEvdoSnr();
                cdmaBean.level = cellSignalStrength.getLevel();
                CellIdentityCdma cellIdentity = ((CellInfoCdma) cellInfo).getCellIdentity();
                cdmaBean.basestationId = cellIdentity.getBasestationId();
                cdmaBean.latitude = cellIdentity.getLatitude();
                cdmaBean.longitude = cellIdentity.getLongitude();
                cdmaBean.networkId = cellIdentity.getNetworkId();
                cdmaBean.systemId = cellIdentity.getSystemId();

                basestation_info.append(cdmaBean.toString() + "\n");
                Log.d(TAG, cdmaBean.toString());
            }
            //WCDMA手机信息
            if (cellInfo instanceof CellInfoWcdma) {
                CellSignalStrengthWcdma cellSignalStrength = ((CellInfoWcdma) cellInfo).getCellSignalStrength();
                wcdmaBean.asuLevel = cellSignalStrength.getAsuLevel();
                wcdmaBean.dbm = cellSignalStrength.getDbm();
                wcdmaBean.level = cellSignalStrength.getLevel();
                CellIdentityWcdma cellIdentity = ((CellInfoWcdma) cellInfo).getCellIdentity();
                wcdmaBean.cid = cellIdentity.getCid();
                wcdmaBean.lac = cellIdentity.getLac();
                wcdmaBean.mcc = cellIdentity.getMcc();
                wcdmaBean.psc = cellIdentity.getPsc();
                basestation_info.append(wcdmaBean.toString() + "\n");
                Log.d(TAG, wcdmaBean.toString());
            }
        }
        //Log.d(TAG,stringBuffer.toString());
    }
}


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:background="#ccc"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="3">

        <TextView
            android:id="@+id/tipInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="正在获取..."
            />
    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">
        <Button
            android:onClick="baseStation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="获取基站信息"/>
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        <TextView
            android:id="@+id/basestation_info"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        </ScrollView>
    </LinearLayout>

</LinearLayout>

最后给 AndroidManifest 添加权限


<!-- 连接互联网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.READ_PHONE_STATE"></uses-permission>


最后来看一下最终的效果图 :




如果是定位没有成功有可能是,手机GPS没有打开、在室内会很慢几乎获取不到(强烈建议室外获取)!


Android Q 基站刷新接口源码分析 & 适配双卡手机基站刷新逻辑 一、获取基站信息的两个关键方法 // 获取所有的基站信息列表 // 在targetSDK < Q时,主动请求基站信息刷新并返回, // >Q 需要调用下面的方法请求刷新 public List<CellInfo> getAllCellInfo() // Android Q 新增,请求基站刷新 public void requestCellInfoUpdate( @NonNull @CallbackExecutor Executor executor, @N 阅读详情

相关推荐

【树莓派】GPS模块获取定位信息

简单记录一下用树莓派+GPS模块实现的获取定位信息的方式 我使用的免驱动安装 EC20 QUETCEL GPS模块 USB接口 哈哈哈这个的4G模块和GPS模块是集成在一起的,想要看实现4G打电话功能的可以看我的另一篇博客哦 https://blog.youkuaiyun.com/weixin_44566432/article/details/110095361 1. 连接模块 这样连接就好了,需要注意的是GPS信号线找到对应的GPS信号口,别插错了!!! GPS信号接口在模块上自己找找能看见的!!!.

weixin_44566432的博客 6537

Android:SIM信息获取

判断SIM卡属于哪个移动运营商 在文件AndroidManifest.xml中添加权限 第一种方法: 获取手机的IMSI码,并判断是中国移动\中国联通\中国电信 TelephonyManager telManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);        

熊诗言的博客 1206

(一)GPS与基站定位

& nbsp 最近看到好多对定位方式的含义及原理,特别是wifi辅助定位的原理搞不明白,所以整理了一下找到的文章再加上自己的理解,科普一下~~& nbsp 首先说一下要阐述这些东西: & nbsp 1、GPS定位。2、基站定位。3、WiFi辅助定位。4、AGPS定位。5、Glonass定位。6、北斗定位。7、定位举例。& nbsp 说个题外话,从4s开始,iPhone手机具有以上中1、2、3、4

大牙哥哥的博客 8887

获取对方手机基站号_通过手机信号获取基站信息—基站定位详解

基站定位原理:通过手机信号获取基站信息,然后调用第三方公开的根据基站信息查找基站的经纬度值,想要具体地址信息的再根据经纬度值获取具体的地址信息。一、通过手机信号获取基站信息通过TelephonyManager 获取lac:mcc:mnc:cell-id(基站信息)的解释:MCC,Mobile Country Code,移动国家代码(中国的为460);MNC,Mobile Network ...

weixin_33393017的博客 7389

获取 gps信息_GPS模块讲解,应用以及程序说明

使用Arduino控制NEO-6M GPS模块应用本应用说明如何将NEO-6M GPS模块与Arduino一起使用以获取GPS数据。GPS代表全球定位系统,可以在旅行时用于确定位置,时间和速度。您将学习到如何:将NEO-6M GPS模块连接到Arduino UNO获取原始GPS数据解析原始数据以获得选定的可读GPS信息取得位置推出NEO-6M GPS模块NEO-6M GPS模块如下图所示。它带有一...

weixin_39567169的博客 3462

Android获取GPS网络定位经纬度信息

定位一般分为是:GPS定位,WIFI定位,基站定位 和 AGPS定位GPS定位GPS定位需要手机GPS模块硬件支持.GPS走的是卫星通信的通道,在没有网络连接的情况下也能使用,并且通过GPS方式准确度是最高的但是比较耗电,绝大部分用户默认不开启GPS模块,从GPS模块启动到获取第一次定位数据,可能需要比较长的时间,室内几乎无法使用网络定位网络定位是指利用基站或Wi-Fi访问提供近似的位置信息,这种...

你只是看起很努力 4264

android手机定位基站pci的获取,微基站的物理小区号pci确定方法、装置、微基站及宏基站的制作方法...

微基站的物理小区号pci确定方法、装置、微基站及宏基站的制作方法【技术领域】[0001] 本发明涉及通信领域,尤其涉及一种微基站的物理小区号PCI确定方法、装置、微 基站及宏基站。【背景技术】[0002] 由于在LTE网络中,接入侧主要依靠物理层小区号PCI来识别小区,因此如果在宏 基站覆盖范围内出现PCI混淆,即一个宏小区内有两个W上的微基站小区PCI相同,则会出 现肥切换失败的情况。[0003...

weixin_39632471的博客 1672

Android基站信息获取实践:GetBaseStationInfo应用

本文还有配套的精品资源,点击获取 简介:在Android平台上,通过获取基站信息来实现移动设备定位是一种有效的方法,尤其适用于GPS信号受限的环境。本文介绍了如何利用Android的Location Manager服务和Network Provider来获取基站信息,包括Cell ID、LAC和信号强度,并详细阐述了位置监听器和隐私权限的使用。此外,还涵盖了应用的项目结构以...

weixin_34456923的博客 2389

Android Service获取当前位置(GPS+基站)

转载自:http://www.cnblogs.com/LiaoHao/archive/2013/09/03/3298514.html 需求详情: 1)、Service中每隔1秒执行一次定位操作(GPS+基站) 2)、定位的结果实时显示在界面上(要求得到经度、纬度) 技术支持: 1)、获取经纬度 通过GPS+基站获取经纬度,先通过GPS来获取,如果为空改用基站进行获取–>GPS+基站(基站

ldkcumt的专栏 3635

Android GPS与基站定位实战指南

Android设备中的全球定位系统(GPS)是一种广泛使用的技术,它能够提供准确的位置信息。GPS定位技术依靠的是卫星信号,能够在室外环境中提供精确至几米的位置数据。尽管如此,GPS定位在室内或者信号覆盖较差的区域准确性会降低,因此开发者需要结合其他定位技术来提升应用的整体定位性能。在Android平台上,利用Google Play Services提供的Location API,开发者可以轻松集成GPS定位功能。

weixin_32673065的博客 1190

机器人动力学与控制学习笔记(一)————机器人控制概述

一、概述 1、机器人控制的目的 对自由运动机器人来说,控制的目的是要控制机器人手端的位置和姿态(以后统一简称为位姿),即所谓位置控制问题。这时希望机器人手端所达到的位置称为期望位置或期望轨迹。期望轨迹可以在机器人任务空间中给出,也可以通过逆运动学关系转化为机器人关节空间中的期望轨迹。期望轨迹通常有两种形式:一种是一个固定位置(即固定点),另一种是一条随时间连续变化的轨迹。自由运动机器人位置控制的目的,是要使机器人手端从任意起始位置出发都能到达期望轨迹。当期望轨迹是固定点时的位置控制称为定...

冰与火的青春的博客 6879

浅析LocationManager的位置定位

针对定位服务,android的API里提供了LocationManager这么一个类 通过getLastKnownLocation(String provider)以及requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)方法可以获取到当前位

蓝斯的专栏 3544

手把手教你用VSCode+MCUXpresso搭建i.MX RT1062开发环境(附RT-Thread Nano移植)

本文详细介绍了如何使用VSCode和MCUXpresso工具链搭建i.MX RT1062开发环境,包括工具链安装、工程配置、调试技巧以及RT-Thread Nano实时操作系统的移植方法。通过实战步骤和优化建议,帮助开发者快速掌握这款高性能Cortex-M7 MCU的开发流程,提升嵌入式开发效率。

weixin_27014595的博客 392

有关基站定位获取GPS以及基站信息的程序

经过几天的调研以及测试,终于解决了联通2G、移动2G、电信3G的基站定位代码。团队里面只有这些机器的制式了。下面就由我来做一个详细的讲解吧。    1 相关技术内容   Google Android Api里面的TelephonyManager的管理。   联通、移动、电信不同制式在获取基站位置的代码区别。   通过基站的基本信息,通过Google Gears获取对应的GPS经纬度。

TIAN316947127的专栏 1987

SystemVerilog实战:AXI Stream协议从零搭建(附完整代码解析)

本文详细介绍了如何使用SystemVerilog从零搭建AXI Stream协议,包括核心信号解析、接口设计、主从设备实现及验证环境构建。通过完整的代码示例和工程实践技巧,帮助开发者掌握AXI Stream在FPGA/ASIC设计中的高效数据传输方法,特别适合视频处理和网络数据传输等应用场景。

weixin_29207439的博客 359

ALTERA Triple-Speed Ethernet IP核在UDP通信中的实战配置指南

本文详细介绍了在Intel FPGA(原ALTERA)平台上配置Triple-Speed Ethernet IP核以实现UDP通信的实战指南。内容涵盖从IP核选型、QSYS系统搭建、关键参数配置,到UDP数据包组装、NIOS C程序调试及上板验证的全流程,重点解析了如何利用该IP核快速构建稳定的千兆网通信基础,为FPGA网络应用开发提供清晰路径。

m3n5b7v8c9x的博客 512

GPS、WiFi、基站、AGPS几种定位原理介绍与区别

定位器的原理: “三角定位法”,知道了用户到三个固定点的距离,就能计算出用户的位置。 1、GPS GPS(Global Positioning System)即全球定位系统,它是由美国研究的一种定位方式,特点是:不需要SIM卡,不需要连接网络,只要在户外,基本上就能随时随地的准确定位。但是GPS启动后搜索卫星的时间比较多,一般需要2分钟左右(俗称冷启动,冷启动包括:1、GPS初次使用 2、GPS...

AmazIOT的博客 3万+

MVSNet (pytorch版) 搭建环境 运行dtu数据集重建 实操教程(图文并茂、超详细)

MVSNet (pytorch版) 代码注释版 下载 (注释非常详细,代码结构有所调整,使用起来更方便) 深度学习三维重建 MVSNet-ECCV-2018 (源码、pytorch版、原文+注释、译文+批注)Meshlab查看三维点云时 ,使用技巧总结。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2938

关于获取基站信息总结

1、简述: 现在用于移动端主流的定位方式有三种,GPS,WIFI和基站定位,他们之间的定位准确度依次递减。但是有时难免有获取基站信息的需求(比如三大运营商想要校准基站位置),下面就获取移动基站(LAC,CID)信息进行分析。 注意: 获取基站的LAC和CID是苹果私有API,获取到后,应用不让上架. 苹果不对企业版本应用做限制,所以不考虑上架的企业级别的应用可以考虑获取基...

aiqiangli4321的博客 849

python基础知识补充

1. jupyter notebook 解释 2. ipython 魔法命令 3. latex in Markdown cell(在markdown里面编写数学公式) 4. jupyter notebook功能扩展:安装Nbextension 5. python解释与运行 6. 垃圾回收(计数机制与分代回收机制) 7. 名字空间与局部作用域L和全局作用域G 8. 小整数缓存区与字符驻留 9. Statement &Expression 10. 调试

weixin_43178406的博客 1万+

Android 12.0 以太网和wifi共存的产品wifi优先级设置功能实现

在12.0的系统ROM定制化开发中,在对于一些有线网和wifi共存的产品中,由于某些产品的特殊要求首选使用wifi,而在原生 系统中以太网的优先级高于wifi的,所以就需要从优先级的设置来分析,实现设置优先级的相关功能实现

安卓兼职framework和app工程师的博客 943
上一篇: 全球最杰出的14位程序员
下一篇: error: conflicting declaration ‘typedef struct LZ4_stream_t LZ4_stream_t’
有志青年L
博客等级 码龄10年 30粉丝 59原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值