活动上下文和BroadcastReciever上下文之间的区别

时间:2014-06-11 12:56:46

标签: android android-broadcast

我想在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中使用它不会返回任何内容。

我认为我的主要问题是上下文,但我不确定。

2 个答案:

答案 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);