1. 程式人生 > >利用手機基站獲取位置

利用手機基站獲取位置

前一段時間,看到一個新聞,竟然光天化日,朗朗乾坤下,居然有人搶孩子,以前是拐賣,現在就開始明搶了!好可怕….

正好專案中遇到了手機基站的一些原理,那今天就在這裡分享一下,現在穿戴裝置這麼發達,如果能有效地利用,說不定能對孩子及時的尋找,起到幫助,同時也是一大商機不是。

什麼是基站:簡單的說就是我們打電話能連線的訊號塔,現在覆蓋範圍城市裡基本達到了一個小區就有一個了。

那麼也就是說,你跟蹤的範圍就是一個小區的範圍之內了。

需要工具:能插手機卡的裝置(小手機就可以),手機卡(能發信息)

我的實現方式:利用獲得的基站資訊,根據設定的合適時間傳送訊息給特定的人(不直接再裝置上定位,因為可能沒網路,當然有了你的基站位置,警察叔叔的系統很快的分析出你的位置,根據你的基站,分析出嫌疑人使用的基站,還能進行監聽…)

那麼先來看看效果:

電信手機展示效果
這裡寫圖片描述

聯通、移動展示效果

這裡寫圖片描述

傳送訊息:
這裡寫圖片描述

接受訊息:

這裡寫圖片描述

當然要還要知道各大運營商程式碼:

46000 中國移動 (GSM)

46001 中國聯通 (GSM)

46002 中國移動 (TD-S)

46003 中國電信(CDMA)

46004 空(似乎是專門用來做測試的)

46005 中國電信 (CDMA)

46006 中國聯通 (WCDMA)

46007 中國移動 (TD-S)

46008

46009

46010

46011 中國電信 (FDD-LTE)

到這裡準備工作完成,開始程式碼:

一、首先獲得運營商:

得到TelephonyManager

tm = (TelephonyManager) UIUtils.getContext().getSystemService(Context.TELEPHONY_SERVICE);

使用它的getNetworkOperatorName方法

 tvOperator.setText(PhoneInfo.getTelephonyManager().getNetworkOperatorName());

二、獲得網路:

package cn.hnshangyu.basestationdemo.utils;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;

/**
 * 獲取網路連線的工具類
 */
public class IntenetUtil {

    //沒有網路連線
    public static final String NETWORN_NONE = "NONE";
    //wifi連線
    public static final String NETWORN_WIFI = "WIFI";
    //手機網路資料連線型別
    public static final String NETWORN_MOBILE = "MOBILE";

    /**
     * 獲取當前網路連線型別
     *
     * @param context
     * @return
     */
    public static String getNetworkState(Context context) {
        //獲取系統的網路服務
        ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        //如果當前沒有網路
        if (null == connManager)
            return NETWORN_NONE;

        //獲取當前網路型別,如果為空,返回無網路
        NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo();
        if (activeNetInfo == null || !activeNetInfo.isAvailable()) {
            return NETWORN_NONE;
        }

        // 判斷是不是連線的是不是wifi
        NetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (null != wifiInfo) {
            NetworkInfo.State state = wifiInfo.getState();
            if (null != state)
                if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {
                    return NETWORN_WIFI;
                }
        }

        // 如果不是wifi,則判斷當前連線的是運營商的哪種網路2g、3g、4g等
        NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (null != networkInfo) {
            NetworkInfo.State state = networkInfo.getState();
            String strSubTypeName = networkInfo.getSubtypeName();
            if (null != state)
                if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {
                    switch (activeNetInfo.getSubtype()) {
                        //如果是2g型別
                        case TelephonyManager.NETWORK_TYPE_GPRS: // 聯通2g
                            return "GPRS";
                        case TelephonyManager.NETWORK_TYPE_CDMA: // 電信2g
                            return "CDMA";
                        case TelephonyManager.NETWORK_TYPE_EDGE: // 移動2g
                            return "EDGE";
                        case TelephonyManager.NETWORK_TYPE_1xRTT:
                            return "1xRTT";
                        case TelephonyManager.NETWORK_TYPE_IDEN:
                            return "IDEN";
                        //如果是3g型別
                        case TelephonyManager.NETWORK_TYPE_EVDO_A: // 電信3g
                            return "EVDO_A";
                        case TelephonyManager.NETWORK_TYPE_UMTS:
                            return "UMTS";
                        case TelephonyManager.NETWORK_TYPE_EVDO_0:
                            return "EVDO_0";
                        case TelephonyManager.NETWORK_TYPE_HSDPA:
                            return "HSDPA";
                        case TelephonyManager.NETWORK_TYPE_HSUPA:
                            return "HSUPA";
                        case TelephonyManager.NETWORK_TYPE_HSPA:
                            return "HSPA";
                        case TelephonyManager.NETWORK_TYPE_EVDO_B:
                            return "EVDO_B";
                        case TelephonyManager.NETWORK_TYPE_EHRPD:
                            return "EHRPD";
                        case TelephonyManager.NETWORK_TYPE_HSPAP:
                            return "IDEN";
                        //如果是4g型別
                        case TelephonyManager.NETWORK_TYPE_LTE:
                            return "LTE";
                        default:
                            //中國移動 聯通 電信 三種3G制式
                            if (strSubTypeName.equalsIgnoreCase("TD-SCDMA")) {
                                return "TD-SCDMA";
                            } else if (strSubTypeName.equalsIgnoreCase("WCDMA")) {
                                return "WCDMA";
                            } else if (strSubTypeName.equalsIgnoreCase("CDMA2000")) {
                                return "CDMA2000";
                            } else {
                                return NETWORN_MOBILE;
                            }
                    }
                }
        }
        return NETWORN_NONE;
    }
}


tvNetwork.setText(IntenetUtil.getNetworkState(this));

三、獲取460程式碼:

tm = (TelephonyManager) UIUtils.getContext().getSystemService(Context.TELEPHONY_SERVICE);

networkOperator = PhoneInfo.getTelephonyManager().getNetworkOperator();

if (networkOperator.startsWith("46000") || networkOperator.startsWith("46002")) {
            //"中國移動";
            showDatasMoeAndLink();
            type = 1;
        } else if (networkOperator.startsWith("46001")) {
            //"中國聯通";
            showDatasMoeAndLink();
            type = 1;
        } else if (networkOperator.startsWith("46003") || networkOperator.startsWith("46011")) {//46003電信3G ,46011電信4G
            //"中國電信";
            showDatasTelecom();
            type = 2;
        }

四、獲得中國移動和聯通的基站資訊

  /**
     * 如果是中國移動和聯通
     */
    private void showDatasMoeAndLink() {
        llLacd.setVisibility(View.VISIBLE);
        llLach.setVisibility(View.VISIBLE);
        llSidd.setVisibility(View.GONE);
        llSidh.setVisibility(View.GONE);
        gcl = (GsmCellLocation) PhoneInfo.getTelephonyManager().getCellLocation();
        lac = gcl.getLac();
        cid = gcl.getCid();
        tvLacd.setText(String.valueOf(lac));
        tvLach.setText(Integer.toHexString(lac));
        tvCid.setText(String.valueOf(cid));
        tvCih.setText(Integer.toHexString(cid));
//        mhandler.sendEmptyMessageDelayed(88, 10 * 1000);
    }

五、獲得中國電信的基站資訊

    /**
     * 如果是中國電信
     */
    private void showDatasTelecom() {
        llLacd.setVisibility(View.GONE);
        llLach.setVisibility(View.GONE);
        llSidd.setVisibility(View.VISIBLE);
        llSidh.setVisibility(View.VISIBLE);
        ccl = (CdmaCellLocation) PhoneInfo.getTelephonyManager().getCellLocation();
        sid = ccl.getSystemId();
        nid = ccl.getNetworkId();
        bid = ccl.getBaseStationId();

        tvSidd.setText(String.valueOf(sid));
        tvSidh.setText(Integer.toHexString(sid));
        tvBidd.setText(String.valueOf(bid));
        tvBidh.setText(Integer.toHexString(bid));
        tvNidd.setText(String.valueOf(nid));
        tvNidh.setText(Integer.toHexString(nid));
//        mhandler.sendEmptyMessageDelayed(88, 10 * 1000);
    }

六、發信息:

  private void sendSms() {
        smsManager = SmsManager.getDefault();
        if (type == 1) {//是中國移動和聯通
            smsManager.sendTextMessage("187****8566", null, "mcc=" + mcc + ",mnc=" + mnc + ",lac=" + lac +
                    ",cid=" + cid, null, null);
        } else if (type == 2) {//是中國電信
            smsManager.sendTextMessage("187****8566", null, "mcc=" + mcc + ",mnc=" + mnc + ",sid=" + sid +
                    ",nid=" + nid + ",bid=" + bid, null, null);
            Log.e("LogUtils","sendTextMessage,sendTextMessage,sendTextMessage");
        }
    }

七、許可權:

 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.SEND_SMS" />

好了基本核心功能就是這了,當然如果需要直接定位的的可以用Google的介面,不過一般使用基站定位都用的是自己後臺介面(用谷歌還不如直接用地圖了,還方便….)

有什麼不足望大家指出,謝謝….

相關推薦

利用手機基站獲取位置

前一段時間,看到一個新聞,竟然光天化日,朗朗乾坤下,居然有人搶孩子,以前是拐賣,現在就開始明搶了!好可怕…. 正好專案中遇到了手機基站的一些原理,那今天就在這裡分享一下,現在穿戴裝置這麼發達,如果能有效地利用,說不定能對孩子及時的尋找,起到幫助,同時也是一大商

Hbuilder獲取手機當前地理位置的天氣

         前言:前面一段時間,公司專案裡有一個需求 是獲取當前手機地理位置當天的天氣情況  將實時天氣資訊提供給客戶。在網上搜索資料時候,發現知識很零碎,自己實現以後整理出來,方便於各位的學習與使用。 一、獲取當前手機地理位置。 &nbs

Java語言利用開源專案獲取手機號碼歸屬地城市

為了解決根據使用者的手機號碼獲取歸屬地城市,特意百度了一下,沒有找到滿意的解決方案。後來在一位矽谷大牛的指導下利用下面的解決方案,個人感覺還不錯: 方案如下: 1、利用開源專案libphonenumber的資源:https://github.com/googlei18n/l

微信客戶端利用百度地圖定位獲取位置資訊

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html

Android獲取手機基站資訊並進行基站定位(基站定位原理)

http://blog.csdn.net/mad1989/article/details/9970431 一,首先普及一下手機基站資訊中相關的專業詞彙:  通過TelephonyManager 獲取lac:mcc:mnc:cell-id(基站資訊)的解釋: MCC,M

如何獲取手機使用者的位置資訊

移動網際網路會充分挖掘使用者的位置資訊並在這點上展開一系列非常新奇的應用和體驗,谷歌在這點走在了前面。我以前一直以為谷歌是跟中國移動合作取得的資料,看了下面這篇文章我才明白了谷歌原來是“偷”來的資料。轉一下,原理講的很清楚,不得不讚! 在今年初推出的Google Map for Mobile新版本中提供了

利用手機的GPS獲取經緯度

package com.example.aman.whereami; import android.Manifest; import android.app.AlarmManager; import android.app.Notification; import and

Android基站定位——通過手機訊號獲取基站資訊

基站定位原理:通過手機訊號獲取基站資訊,然後呼叫第三方公開的根據基站資訊查詢基站的經緯度值,想要具體地址資訊的再根據經緯度值獲取具體的地址資訊。 一、通過手機訊號獲取基站資訊  通過TelephonyManager 獲取lac:mcc:mnc:cell-id(基站資訊)的

Android應用利用超聲波來獲取用戶隱私

android 軟件開發 超聲波 谷歌 北京時間5月8日上午消息,德國布倫瑞克工業大學研究人員近期發表的一篇論文顯示,谷歌應用商店中的200多款應用利用人耳無法聽見的超聲波去追蹤用戶。這些應用被累計下載了數百萬次,可能對用戶的隱私構成威脅。近1年前,應用開發商SilverPush曾在電視廣告中

Android 在Android手機獲取其他應用的包名及版本號

string android手機 app名 fin 產品 logo 信息 led 直接 獲取Android手機上其他應用的包名及版本號方法有很多,可以通過AAPT從APK包中直接獲取,也可以通過代碼在手機上獲取。顯然,對於產品或者用戶來說要獲取這些信息,在手機上獲取更為簡便

微信公眾平臺開發—利用OAuth2.0獲取微信用戶基本信息

arch getjson code back acc unicom toc gets down 1、首先在某微信平臺下配置OAuth2.0授權回調頁面: 2、通過appid構造url獲取微信回傳code值(appid可在微信平臺下找到) 1)、微信不彈出授權頁面ur

獲取位置

create you .html 位置 text eat api out 元素 獲取標簽位置:1.var position = $(‘p‘).position();$(‘p‘).html(‘left:‘+position.left+‘,top:‘+position.top)

Elasticsearch利用scroll查詢獲取所有數據

0.12 但是 比較 ext class python實現 方式 search contex Elasticsearch有兩種分頁方式,一種是通過from和size條件來實現,但是該方法開銷比較大,另一種是利用scroll來實現,通過scroll來實現分頁獲取所有的數據,下

iOS 【UIKit-UIPageControl利用delegate定位圓點位置 之 四舍五入小技巧】

優化 距離 scroll current control 水平 技術 觸發 src 在UIScrollView中會加入UIPageControl作為頁碼標識,能夠讓用戶清楚的知道當前的頁數。我們須要優化的一點是讓pageControl

Jenkins與釘釘機器人實現手機獲取當前服務日誌

不同的 hub 使用 .com -o lib 51cto set 筆記本 馬上要過年了,各位運維們除了因為買不到回家的火車票而嚎嚎大哭之外也開始擴容服務器和提前調整監控值,目的就是為了過一個消停的春節。可是這畢竟十天左右不在公司,要是模塊真出了什麽意外肯定沒法第一找到日誌分

利用R語言獲取股票數據教程

spa space 大盤 adding body SM ref auto add R獲取股票數據 R中好幾個Pkg都提供了股票數據的在線下載要領,假如非得在個中找出一個較好的,那麽quantmod當之無愧!舉一個例子,譬如下載滬市大盤數據,代碼可以是:libra

SpringBoot利用註解@Value獲取properties屬性為null

pro 解決 autowired dfs stat info 如何 一個 去掉 參考:https://www.cnblogs.com/zacky31/p/8609990.html 今天在項目中想使用@Value來獲取Springboot中properties中屬性值。

深入玩轉K8S之利用Label控制Pod位置

white fff size 利用 怎麽 oss 文件 cto yml 首先介紹下什麽是Label?Label是Kubernetes系列中一個核心概念。是一組綁定到K8s資源對象上的key/value對。同一個對象的labels屬性的key必須唯一。label可以附加到各種

python3 利用正則獲取網頁中的想儲存下來的內容

需要獲取某個網頁中表格部分中某個產品的成份 分析在html中成份的元素程式碼 <a href="/composition/4c3060178d1184935a48c4e51be4f63f.html">水</a> 用正則匹配,由於 4c3060178d118

2018 - Python 3.7 爬蟲之 利用 Scrapy 框架 獲取圖片並下載(二)

一、 通過命令構建一個爬蟲專案 二、定義 item 三、啟用 pipeline 管道 四、編寫爬蟲 Spider 五、執行爬蟲 六、結果檢視 未安裝 Scrapy 框架,見上一篇文章:框架安裝及配置 一、 通過命令構建一個爬蟲專