我目前正在为我的大学研究项目开发一个Android应用程序。该应用程序应该能够读取附近GSM基站的RSSI级别。我编写了以下函数,该函数成功读取了附近单元格的RSSI级别。我每200毫秒调用一次这个函数,但RSSI值几乎不随时间变化。我怀疑基带处理器每xs只更新这些值,但我找不到任何有关刷新率的信息。有人知道 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
答案 0 :(得分:2)
我认为你可以在这个实现上使用更好的方法。
您可以注册一个监听器,而不是使用定义的时间间隔来查询“单元信息”,只要单元信息发生更改,就会调用该监听器。
这样,您就不必担心理想的价值,而且,您也不会浪费资源检查可能尚未更改的信息。
您可以使用PhoneStateListener。您创建它并注册它以接收单元格信息更改。如果不再需要(后台活动或被破坏),您必须取消注册。
以下是一个例子。我没有测试。但它可能会帮助你理解这个想法。
// standard includes
#include <iostream>
#include <string>
#include <fstream>
#include <cassert>
// includes for defining the Voronoi diagram adaptor
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Voronoi_diagram_2.h>
#include <CGAL/Segment_Delaunay_graph_2.h>
#include <CGAL/Segment_Delaunay_graph_adaptation_traits_2.h>
#include <CGAL/Segment_Delaunay_graph_adaptation_policies_2.h>
#include <CGAL/Segment_2.h>
#include <CGAL/Segment_Delaunay_graph_traits_2.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Segment_Delaunay_graph_traits_2<K> Gt;
typedef CGAL::Segment_Delaunay_graph_2<Gt> DT;
typedef CGAL::Segment_Delaunay_graph_adaptation_traits_2<DT> AT;
typedef CGAL::Segment_Delaunay_graph_degeneracy_removal_policy_2<DT> AP;
typedef CGAL::Voronoi_diagram_2<DT, AT, AP> VD;
typedef AT::Site_2 Site_2;
typedef VD::Face_handle Face_handle;
int main()
{
std::ifstream ifs("data.cin");
assert( ifs );
VD vd;
Site_2 t;
while ( ifs >> t ) { vd.insert(t); }
ifs.close();
assert( vd.is_valid() );
std::cout << vd.number_of_faces() << std::endl;
VD::Face_iterator it = vd.faces_begin(),
beyond = vd.faces_end();
for (int f=0; it != beyond; ++f, ++it) {
std::cout << "Face" << f << ": \n";
VD::Ccb_halfedge_circulator hec = it->ccb();
do {
VD::Halfedge_handle heh = static_cast<VD::Halfedge_handle>(hec);
if (heh->has_target())
std::cout << heh->target()->point() << "\n";
else
std::cout << "point at infinity\n";
} while (++hec != it->ccb());
std::cout << std::endl;
}
return 0;
}
希望我能帮助你。