Android基站定位——通过手机信号获取基站信息(一),程序员去大公司面试

389 阅读2分钟

import android.os.Bundle;

import android.telephony.NeighboringCellInfo;

import android.telephony.TelephonyManager;

import android.telephony.cdma.CdmaCellLocation;

import android.telephony.gsm.GsmCellLocation;

import android.util.Log;

import android.view.View;

/**

  • 功能描述:通过手机信号获取基站信息

  • 通过TelephonyManager 获取lac:mcc:mnc:cell-id

  • MCC,Mobile Country Code,移动国家代码(中国的为460);

  • MNC,Mobile Network Code,移动网络号码(中国移动为0,中国联通为1,中国电信为2);

  • LAC,Location Area Code,位置区域码;

  • CID,Cell Identity,基站编号;

  • BSSS,Base station signal strength,基站信号强度。

  • @author android_ls

*/

public class GSMCellLocationActivity extends Activity {

private static final String TAG = "GSMCellLocationActivity";



@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);



    // 获取基站信息

    findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {



        @Override

        public void onClick(View v) {



            TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);



            // 返回值MCC + MNC

            String operator = mTelephonyManager.getNetworkOperator();

            int mcc = Integer.parseInt(operator.substring(0, 3));

            int mnc = Integer.parseInt(operator.substring(3));



            // 中国移动和中国联通获取LAC、CID的方式

            GsmCellLocation location = (GsmCellLocation) mTelephonyManager.getCellLocation();

            int lac = location.getLac();

            int cellId = location.getCid();



            Log.i(TAG, " MCC = " + mcc + "\t MNC = " + mnc + "\t LAC = " + lac + "\t CID = " + cellId);



            // 中国电信获取LAC、CID的方式

            /*CdmaCellLocation location1 = (CdmaCellLocation) mTelephonyManager.getCellLocation();

            lac = location1.getNetworkId();

            cellId = location1.getBaseStationId();

            cellId /= 16;*/

            

            // 获取邻区基站信息

            List<NeighboringCellInfo> infos = mTelephonyManager.getNeighboringCellInfo();

            StringBuffer sb = new StringBuffer("总数 : " + infos.size() + "\n");

            for (NeighboringCellInfo info1 : infos) { // 根据邻区总数进行循环

                sb.append(" LAC : " + info1.getLac()); // 取出当前邻区的LAC

                sb.append(" CID : " + info1.getCid()); // 取出当前邻区的CID

                sb.append(" BSSS : " + (-113 + 2 * info1.getRssi()) + "\n"); // 获取邻区基站信号强度

            }



            Log.i(TAG, " 获取邻区基站信息:" + sb.toString());



        }

    });



}

最后

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

最后针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

需要资料的朋友可以点击我的GitHub免费领取