仅备份

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. Integer 和 int 比较的特殊之处
  2. [LeetCode]--290. Word Pattern
  3. python ctypes实现api测试_Python与C之间的相互调用(Python C API及Python ctypes库)
  4. [导入]基类的复制控制函数
  5. 计算机网络(二十六)-IP数据报分片
  6. 谈谈button标签和input标签的区别
  7. spark SQL压缩入门
  8. 计算机系统基础袁春风试题,计算机系统基础习题解答与教学指导
  9. 矢量信号发生器与射频信号发生器的区别是什么?
  10. LoadRunner性能测试培训大纲
  11. 苹果MacBook Air安装win7
  12. 信任是高效工作的基石,但是得来却非常不易
  13. 前端HTML5面试题
  14. linux开发技术栈
  15. Javascript的undefined和notdefined的区别
  16. CentOS 8 下载中文输入法的问题
  17. 计算机硬件相关行业,2021年中国电脑硬件行业市场规模及发展前景预测分析(图)...
  18. matlab与amesim,amesim与matlab联合仿真步骤(自己总结)(精)
  19. linux性能优化实战 倪朋飞,Linux性能优化实战:系统的swap变高(09)
  20. 终于有华为网工整理网工10大必备软件,最新软件安装包

热门文章

  1. Linux 进程控制(创建/退出/等待/替换)
  2. Sql调优(面试题)
  3. cad中怎么随意移动图形_Cad中如何移动图形?AutoCAD移动图形的图文操作流程
  4. 解决报错{ error_code: 18, error_msg: ‘Open api qps request limit reached‘ }
  5. Transformer入门(一)——结构
  6. php apk 签名验证,Android_如何安装系统认证签名过的APK,解决方法有如下两种: 第一 - phpStudy...
  7. ESP-C3入门13. SoftAP模式
  8. IT资讯精选(2022-09-07)
  9. sqlserver2008r2 服务自动停止_坏消息!亚马逊一项功能将于8月停止服务,卖家难以接受...
  10. 推荐给就做的办公族一套简单的体操,活动筋骨,避免颈椎病