仅备份

package com.ztl.monitor4g;import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.IBinder;
import android.os.Message;
import android.telephony.CellInfo;
import android.telephony.CellInfoLte;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import android.util.Log;import androidx.annotation.RequiresApi;import org.json.JSONException;
import org.json.JSONObject;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;import ZtlApi.ZtlManager;public class MainService extends Service {private static final String TAG = "MainService";public static String ver = "20201121";public static MainService Instatnce = null;TelephonyManager mTelephonyManager;MyPhoneStateListener myListener;public MainService() {Log.e("MainService()","MainService() 被调用");Instatnce = this;}@Overridepublic void onCreate(){Log.e(TAG, "onCreate is call. ver:" + ver);ZtlManager.GetInstance().setContext(this);mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);if( Build.VERSION.SDK_INT <25 ){myListener = new MyPhoneStateListener();//5.1只能用这个mTelephonyManager.listen(null, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);mTelephonyManager.listen(myListener, PhoneStateListener.LISTEN_NONE);mTelephonyManager.listen(myListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);}else{//7.1 这个才是对的 5.1返回空new Thread(new Runnable() {@Overridepublic void run() {TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);while (true){@SuppressLint("MissingPermission") List<CellInfo> cellInfoList = tm.getAllCellInfo();if(cellInfoList != null){for (CellInfo cellInfo : cellInfoList){if (cellInfo instanceof CellInfoLte){//cast to CellInfoLte and call all the CellInfoLte methods you needint dbm = ((CellInfoLte)cellInfo).getCellSignalStrength().getDbm();int asu = ((CellInfoLte)cellInfo).getCellSignalStrength().getAsuLevel();String provider = getProvider();String celluarType = getCellularType();String logTxt = String.format("%s %s dbm:%d asu:%d \n", provider, celluarType, dbm, asu);logFile(logTxt, true);Log.i("mb_signal info",provider + " " + celluarType+ " dbm:" + dbm +" asu:" + asu);break;}}}try {Thread.sleep(1000 );} catch (InterruptedException e) {e.printStackTrace();}}}}).start();}}@Overridepublic IBinder onBind(Intent intent) {// TODO: Return the communication channel to the service.throw new UnsupportedOperationException("Not yet implemented");}@Overridepublic void onDestroy() {super.onDestroy();}//输出调试文本public static void logFile(String txt, boolean genDate) {String final_txt = "";if (genDate) {SimpleDateFormat dateformat = new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]");String dateStr = dateformat.format(System.currentTimeMillis());final_txt = dateStr;}try {FileOutputStream outSTr = new FileOutputStream(new File("/sdcard/Download/4glog.txt"), true);BufferedOutputStream Buff = new BufferedOutputStream(outSTr);Buff.write(final_txt.getBytes());Buff.write(txt.getBytes());Buff.flush();Buff.close();} catch (IOException e) {e.printStackTrace();}}String getProvider(){@SuppressLint("MissingPermission")String IMSI = mTelephonyManager.getSubscriberId();//Log.i("qweqwes", "运营商代码" + IMSI);String ProvidersName = "Unknown";if (IMSI != null) {if (IMSI.startsWith("46000") || IMSI.startsWith("46002") || IMSI.startsWith("46007") || IMSI.startsWith("46004")) {ProvidersName = "中国移动";} else if (IMSI.startsWith("46001") || IMSI.startsWith("46006")) {ProvidersName = "中国联通";} else if (IMSI.startsWith("46003") || IMSI.startsWith("46011")) {ProvidersName = "中国电信";} elseProvidersName = IMSI;} else {}return ProvidersName;}@SuppressLint("MissingPermission")String getCellularType(){String cellularType="";int nSubType = mTelephonyManager.getNetworkType();if (nSubType == TelephonyManager.NETWORK_TYPE_GPRS|| nSubType == TelephonyManager.NETWORK_TYPE_EDGE|| nSubType == TelephonyManager.NETWORK_TYPE_CDMA|| nSubType == TelephonyManager.NETWORK_TYPE_GSM) {cellularType = "2G";} else if (nSubType == TelephonyManager.NETWORK_TYPE_UMTS|| nSubType == TelephonyManager.NETWORK_TYPE_HSDPA|| nSubType == TelephonyManager.NETWORK_TYPE_EVDO_0) {cellularType= "3G";} else if (nSubType == TelephonyManager.NETWORK_TYPE_LTE) {cellularType= "4G";} else if (nSubType == TelephonyManager.NETWORK_TYPE_NR) {cellularType= "5G";}else  if(nSubType == TelephonyManager.NETWORK_TYPE_UNKNOWN){cellularType= "0G";}elsecellularType = String.valueOf( nSubType );return cellularType;}//5.1用这个private class MyPhoneStateListener extends PhoneStateListener {@Overridepublic void onSignalStrengthsChanged(SignalStrength signalStrength) {super.onSignalStrengthsChanged(signalStrength);try {Method method = signalStrength.getClass().getMethod("getDbm");int dbm = (int) method.invoke(signalStrength);Method method1 = signalStrength.getClass().getMethod("getAsuLevel");int asu = (int) method1.invoke(signalStrength);String provider = getProvider();String celluarType = getCellularType();String logTxt = String.format("%s %s dbm:%d asu:%d \n", provider, celluarType, dbm, asu);logFile(logTxt, true);Log.e("mb_signal info",provider + " " + celluarType+ " dbm:" + dbm +" asu:" + asu);//通过这个方法能获取出和系统一样的信号格数//Method method2 = signalStrength.getClass().getMethod("getLteLevel");//int level = method2.invoke(signalStrength);} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {e.printStackTrace();Log.d("TAG", "onSignalStrengthsChanged: 獲取4G訊號強度值失敗");}}@Overridepublic void onServiceStateChanged(ServiceState serviceState) {int state = serviceState.getState();if( state == ServiceState.STATE_EMERGENCY_ONLY){Log.e("手机网络状态","STATE_EMERGENCY_ONLY");logFile("手机网络状态:STATE_EMERGENCY_ONLY\n", true);}else if( state == ServiceState.STATE_OUT_OF_SERVICE){Log.e("手机网络状态","STATE_OUT_OF_SERVICE");logFile("手机网络状态:STATE_OUT_OF_SERVICE\n", true);}else if( state == ServiceState.STATE_IN_SERVICE){Log.e("手机网络状态", "STATE_IN_SERVICE" );logFile("手机网络状态:STATE_IN_SERVICE\n", true);}else if(state == ServiceState.STATE_POWER_OFF){Log.e("手机网络状态", "STATE_POWER_OFF" );logFile("手机网络状态:STATE_POWER_OFF\n", true);}else{Log.e("手机网络状态", "" + state);logFile("手机网络状态:" + state+"\n", true);}}}}

既非原创也非抄袭。本人只做搬运和融合。特此声明

引用地址:

https://www.itread01.com/content/1545403538.html

https://blog.csdn.net/zjy764219923/article/details/104944238

https://www.it610.com/article/1293138498462752768.htm

Android 获取4G信号强度的方法相关推荐

  1. Android 获取4g信号强度

    /*** 获取移动信号强度*/@SuppressLint("MissingPermission", "NewApi")private fun getMobile ...

  2. 获取4g信号强度android,Android6.0获取4G信号的信号强度(dbm)进行显示

    起因:项目需要获取4G信号强度,进行显示. 经过:通过google,发现获取4G信号强度都是通过读取字符串的方式获取,但是我还没有搞懂取出的是什么,也不知道怎么通过那个值转化成显示的格数. 所以,我想 ...

  3. android 获取蓝牙信号强度,连接后获取蓝牙RSSI信号强度

    android 获取蓝牙信号强度,连接后获取蓝牙RSSI信号强度 基于蓝牙的RSSI可以有很多应用,要获得蓝牙的RSSI无外乎两种方法. 第一种:基于扫瞄的方法 优点是Android本身支持,缺点是s ...

  4. Android获取网速的方法

    Android获取网速的方法 Android获取网速的方法 posted on 2018-08-23 11:54 时空观察者9号 阅读(...) 评论(...) 编辑 收藏

  5. android+头像+程序,Android获取联系人头像的方法

    本文实例讲述了Android获取联系人头像的方法.分享给大家供大家参考,具体如下: public byte[] getPhoto(String people_id) { String photo_id ...

  6. linux计算4g网络速率,Linux 获取 4G 信号强度

    找了好多资料还是没找到 获取4G信号强度的应用代码 最后没办法了, 只能自己写了 首先要知道AT指令是什么 这个可以参考下面的连接: https://www.cnblogs.com/yuweifeng ...

  7. android 内核 版本,详解Android获取系统内核版本的方法与实现代码

    Android获取系统内核版本的方法 这里主要实现获取Android Linux 内核的版本号,网上关于这类文章不是很多,这里记录下,希望能帮助到大家, 实现代码: public static Str ...

  8. 信号强度 android,一种获取手机信号强度的方法

    出于项目需求,需要获取到手机信号强度.本人不才,以前都是采用toString()的方法,然后截取,得到强度,但发现很多机型都不适合.苦苦在API中搜寻,结果都不是很理想.最后在Stackoverflo ...

  9. android 获取gps信号强度值,一种获取手机信号强度的方法

    出于项目需求,需要获取到手机信号强度.本人不才,以前都是采用toString()的方法,然后截取,得到强度,但发现很多机型都不适合.苦苦在API中搜寻,结果都不是很理想.最后在Stackoverflo ...

最新文章

  1. 上海交大张拳石:漂在零丁洋里的体系,神经网络的博弈交互解释性
  2. 本周学习进度表及时间安排(2018-1-7~2018-1-13)
  3. getBoundingClientRect()方法
  4. h5 修改title 微信_微信公众号客服消息不限次数推送如何设置?
  5. Jquery ajax json 不执行success的原因
  6. css animation动画完成后隐藏_css3动画简介以及动画库animate.css的使用
  7. dom4j-2.1.1 jaxen-1.1.6 读取xml数据源
  8. java报错空指针异常_java – 空指针异常错误,没有明显的代码错误
  9. 不愧是击溃服务器的男人!周杰伦《说好不哭》刷新QQ音乐单曲纪录
  10. 使用springmvc时处理404的方法
  11. 联发科mtk手机处理器怎么样_【今日短讯】一加概念手机Concept One发布|苹果iPhone 9渲染图出炉|联发科5G处理器天玑800发布...
  12. 深度学习图像分类(十二):MobileNet系列(V1,V1,V3)
  13. 工具 - 文本比较/对比 - 收集
  14. 详说ArcGIS之重采样技术图文解析
  15. insert into on duplicate key update
  16. GoDaddy域名转出教程 - 解锁、获取转移码、快速确认转出
  17. Faster-RCNN简易复现
  18. Ant Design Vue 如何分页(后台传入)
  19. ​携创教育:2022年下半年自考准考证号查询系统汇总
  20. 【弹吉他必备的乐理知识】【1】音乐中的音

热门文章

  1. 程序员,男,工作7年,android语音通话开发
  2. C实现-字符串连接(具体)
  3. AFNetworking网络请求失败
  4. 六年的休战符:苹果用10亿美元买了和高通5G战争的入场券
  5. RobotStudio Common指令第一讲
  6. incrby redis 最大值_Redis——设置最大内存 | key淘汰机制
  7. PCL中GreedyProjection三角化算法简介与示例
  8. 不要轻易选择ERP?亚马逊ERP卖家精细化运营
  9. python钻石图_Python图中用平行线制成的钻石
  10. 文件定时上传服务器,文件定时上传至服务器