gpt4 book ai didi

android - onCellInfoChanged() 回调始终为空

转载 作者:太空宇宙 更新时间:2023-11-03 12:19:38 24 4
gpt4 key购买 nike

我正在尝试获取设备可以找到的所有可用单元格的列表。但我被卡住了,因为我的 CellInfo 总是空的,我不明白为什么。有人可以给我提示吗?在 google 上关于 onCellInfoChanged() 的信息很少。

主要 Activity :

 CellListener cellListener = new CellListener(this);
cellListener.start();

细胞监听器:

public class CellListener extends PhoneStateListener {

private static final String TAG = "CellListener";
private TelephonyManager telephonyManager = null;
private PhoneStateListener listener = null;
private String newCell = null;
private int events = PhoneStateListener.LISTEN_CELL_LOCATION | PhoneStateListener.LISTEN_CELL_INFO;
private Context context = null;

public CellListener(Context context) {
this.context = context;
}

public void start() {

telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
CellLocation.requestLocationUpdate();

telephonyManager.listen(this, events);
}

@Override
public void onCellInfoChanged(List<CellInfo> cellInfo) {
Log.i("CellListener","onCellInfoChanged(List<CellInfo> cellInfo) ");
super.onCellInfoChanged(cellInfo);

if(cellInfo == null) return; // this always null here

for (CellInfo c : cellInfo) {
Log.i("CellListener"," c = "+c);
}
}

@Override
public void onCellLocationChanged(CellLocation location) {
if (!(location instanceof GsmCellLocation)) {
return;
}
GsmCellLocation gsmCell = (GsmCellLocation) location;
String operator = telephonyManager.getNetworkOperator();
if (operator == null || operator.length() < 4) {
return;
}
newCell = operator.substring(0, 3) + ':' + operator.substring(3) + ':'
+ gsmCell.getLac() + ':' + gsmCell.getCid();

Log.i(TAG,"newCell = "+newCell);
}
}

日志:

11-18 14:50:23.806: I/CellListener(4953): newCell = 262:02:4311:99031735
11-18 14:50:23.814: I/CellListener(4953): onCellInfoChanged(List<CellInfo> cellInfo)

如您所见,两个事件(onCellInfoChanged 和 onCellLocationChanged)都被触发一次,后者正确返回设备正在使用的当前单元格。

最佳答案

你只被调用一次并且以 null 作为参数的真正原因如下:默认情况下似乎有一个速率限制设置,可以在“测试”应用程序中观察到,它可以可通过调用 *#*#INFO#*#*(即 *#*#4636#*#*)访问。

在测试应用中,选择“电话信息”并向下滚动到按钮 CELLINFOLISTRATE xxxx,在您的情况下大概是 CELLINFOLISTRATE 2147483647。作为 2147483647 == MAX_INT,这可能意味着根本没有调用

对我来说(stock android 6.0,nexus 6),可以在 MAX_INT(一次调用为 null)、01000.

我不是 100% 确定这些值的含义,但大概 0 代表即时(因此非常多)调用,而 1000 代表调用之间至少一秒钟。不过请记住,这纯粹是猜测。

我会在发现更多信息后编辑此答案,例如通过查看所述测试应用程序的实现。

关于android - onCellInfoChanged() 回调始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20049510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com