我想在BroadcastReciever的OnRecieve()中使用以下代码获取所有BTS塔
TelephonyManager telManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
List<NeighboringCellInfo> BTSList = telManager.getNeighboringCellInfo();
for (int i = 0; i < BTSList.size(); i++) {
int cid = BTSList.get(i).getCid();
}
如果我在Activity中使用此代码,则效果很好。但在BroadcastReciever中使用它不会返回任何内容。
我认为我的主要问题是上下文,但我不确定。
答案 0 :(得分:0)
因为上下文无关紧要,所以会想到两件事。首先,我假设您使用BroadcastReceiver将ACCESS_COARSE_UPDATES添加到应用程序的清单中?
第二,你偶然尝试过getAllCellInfo吗?我只是问,因为getNeighboringCellInfo的文档说它将来会被弃用:
返回设备的相邻单元信息。 getAllCellInfo是首选,仅当getAllCellInfo返回空值或空列表时才使用它。
以后这个电话会被弃用。
返回 NeighboringCellInfo列表,如果信息不可用,则为null。 需要许可:(@ link android.Manifest.permission#ACCESS_COARSE_UPDATES}
答案 1 :(得分:0)
是 问题与上下文有关,但不是因为它的类型,因为上下文涉及接收短信。 要解决此问题,您必须创建一个线程并获取其中的bts信息。 最好用20秒延迟调用你的线程。你可以在OnRecieve()
中使用它 Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// get info here
}
}, 20000);