- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在为我的大学研究项目开发 Android 应用程序。此应用程序应该能够读取附近 GSM 基站的 RSSI 级别。我编写了以下函数,它成功读取了附近小区的 RSSI 电平。我每 200 毫秒调用一次此函数,但 RSSI 值几乎不会随时间变化。我怀疑基带处理器仅在每个 x s 更新这些值,但我找不到有关刷新率的任何信息。有谁知道 getAllCellInfo() 中的信息刷新速度有多快?我想知道这一点的原因是因为时机对我的设置非常重要。在实验室中,我们以特定频率(大于 1 Hz)启用和禁用干扰器。启用干扰器后,RSSI 值将下降。所以我想知道如果以 10 赫兹的频率启用和禁用干扰器,RSSI 可以多快刷新以检测此信号下降。
public HashMap<Integer,Integer> RSSI_values() {
HashMap<Integer,Integer> result = new HashMap<Integer,Integer>();
TelephonyManager telephonyManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.getNetworkType();
List<CellInfo> CellInfo_list = telephonyManager.getAllCellInfo();
if(telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_EDGE) {
for (int i = 0; i < CellInfo_list.size(); i++) {
CellInfoGsm cellinfogsm = (CellInfoGsm) CellInfo_list.get(i);
int cid = cellinfogsm.getCellIdentity().getCid();
CellSignalStrengthGsm cellSignalStrengthGsm = cellinfogsm.getCellSignalStrength();
int rssi = cellSignalStrengthGsm.getDbm();
result.put(cid,rssi);
}
}
return result;
}
如果此刷新率是设备特定的,我使用的是 nexus 5 android 6.0.1
最佳答案
我认为您可以在此实现上使用更好的方法。
您可以注册一个监听器,而不是使用定义的时间间隔来查询单元信息,每次单元信息更改时都会调用该监听器。
这样,您无需担心理想值,也不会浪费资源检查可能尚未更改的信息。
您可以使用 PhoneStateListener。您创建它并注册它以接收单元格信息更改。当不再需要它时(后台 Activity 或已销毁),您必须取消注册它。
下面是一个例子。我没有测试。但它可能会帮助你理解这个想法。
public class MainActivity extends Activity {
private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
@Override
public void onCellInfoChanged(List<CellInfo> cellInfoList) {
// This callback method will be called automatically by Android OS
// Every time a cell info changed (if you are registered)
// Here, you will receive a cellInfoList....
// Same list that you will receive in RSSI_values() method that you created
// You can maybe move your whole code to here....
}
};
@Override
public void onStart() {
super.onStart();
// Code below register your mPhoneStateListener will start to be called everytime cell info changed.
// If you update any UI element, be sure that they were created already (since they are created during "onCreate".. and not at onStart)
// I added LISTEN_CELL_LOCATION.. But I think that PhoneStateListener.LISTEN_CELL_INFO is enough
TelephonyManager mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CELL_LOCATION | PhoneStateListener.LISTEN_CELL_INFO);
}
@Override
public void onStop() {
// Code below unregister your listener... You will not receive any cell info change notification anymore
TelephonyManager mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
super.onStop();
}
}
希望能帮到你。
关于Android TelephonyManager getAllCellInfo() 刷新率 RSSI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37441832/
我正在使用 getAllCellInfo 从我的手机(unrooted LG G5 - 它的值(value))获取服务和相邻小区信息,但该函数返回所有相邻测量塔的重复数据。在我所在的地区,我的测试数据
有谁知道从 TelephonyManager.getAllCellInfo() 返回的列表中的单元格索引是否与 SIM 插槽编号相关? 我正在使用 Android API 24... 经过一些实验,似
我是 Android 新手,我正在从事一个项目,该项目旨在收集手机观察到的所有细胞信息。我使用了 TelephonyManager.getAllCellInfo() 方法,但它总是返回 null。 我
我有一个 Android 应用程序可以获取手机信号塔的信息。我使用此 getAllCellInfo() 来获取主单元格和相邻单元格的信息。我将 ACCESS_COARSE_LOCATION 权限包含在
我目前正在为我的大学研究项目开发 Android 应用程序。此应用程序应该能够读取附近 GSM 基站的 RSSI 级别。我编写了以下函数,它成功读取了附近小区的 RSSI 电平。我每 200 毫秒调用
我阅读了所有关于 getAllCellInfo() 的帖子并且遇到了类似 this 的情况.下面发布的代码在 Android 6 (OnePlus One) 上运行良好,但在 Google Nexus
最近我在尝试使用 Android 设备获取相邻小区的信息。而且我试过很多品牌的安卓手机,比如三星,htc。结果只是Htc可以得到邻区信息。我使用的函数是 TelephonyMananger.getNe
Android 有一个 API 方法:getAllCellInfo() “从设备上的所有 radio 返回所有观察到的小区信息,包括主小区和相邻小区”。在 iOS 上,我找到了 CTCarrier类以
我的 Android 版本是 4.2.1,我正在尝试使用 TelephonyManager.getAllCellInfo() 方法。在我的 list 文件中,我拥有 ACCESS_COARSE_UPD
我是一名优秀的程序员,十分优秀!