requestNetworkScan-返回无效的手机标识-Android P



我正在开发一个特权系统应用程序来扫描网络。在执行API之后,结果不包含有效的小区标识信息。所有值都以0、null或最大整数形式返回。

已授予相关系统特权权限。

代码摘录:

public class ScannerActivity extends Activity implements View.OnClickListener {
private final int PHONE_STATE_REQUEST = 1;
private Button scanButton;
private TextView resultsTextView;
private class RadioCallback extends TelephonyScanManager.NetworkScanCallback {
private List<CellInfo> mCellInfoResults;
private int mScanError;
@Override
public void onResults(List<CellInfo> cellInfoResults) {
mCellInfoResults = cellInfoResults;
ScannerActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
for (CellInfo cellInfo:mCellInfoResults) {
resultsTextView.append(" " + cellInfo.toString() + " ");
}
}
});
}

@Override
public void onError(int error) {
mScanError = error;
ScannerActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
resultsTextView.append(" Error: " + mScanError);
}
});
}
@Override
public void onComplete() {
ScannerActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
resultsTextView.append(" Scan Completed! ");
}
});
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scanner);
scanButton = (Button) findViewById(R.id.scan_button);
scanButton.setOnClickListener(this);
resultsTextView = (TextView)  findViewById(R.id.results_text_view);
}

public void onClick(View view) {
NetworkScanRequest networkScanRequest;
RadioAccessSpecifier radioAccessSpecifiers[];

TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext()
.getSystemService(Context.TELEPHONY_SERVICE);
radioAccessSpecifiers = new RadioAccessSpecifier[1];
radioAccessSpecifiers[0] = new RadioAccessSpecifier(
AccessNetworkConstants.AccessNetworkType.UTRAN,
null,
null);
networkScanRequest = new NetworkScanRequest(
NetworkScanRequest.SCAN_TYPE_ONE_SHOT,
radioAccessSpecifiers,
30,
300,
true,
3,
null);
telephonyManager.requestNetworkScan(networkScanRequest,     AsyncTask.SERIAL_EXECUTOR,new RadioCallback());
}

知道为什么会发生这种事吗?已在像素2上尝试。

您可以检查无线电层是否响应您的请求NetworkScan提供了有效的小区标识信息。通过cmd"adb logcat-v time-b radio">获取无线电日志,并检查此日志中是否出现UNSOL_NETWORK_SCAN_RESULTAPI。以下是对这种主动回复的描述。

/**
* RIL_UNSOL_NETWORK_SCAN_RESULT
*
* Returns incremental result for the network scan which is started by
* RIL_REQUEST_START_NETWORK_SCAN, sent to report results, status, or errors.
*
* "data" is NULL
* "response" is a const RIL_NetworkScanResult *
*/
#define RIL_UNSOL_NETWORK_SCAN_RESULT 1049

响应结构RIL_NetworkScanResult具有以下字段:

typedef struct {
RIL_ScanStatus status;              // The status of the scan
uint32_t network_infos_length;      // Total length of RIL_CellInfo
RIL_CellInfo_v12* network_infos;    // List of network information
RIL_Errno error;
} RIL_NetworkScanResult;

如果此UNSOL_NETWORK_SCAN_RESULT响应返回NULL结构或根本没有UNSOL_NET WORK_SCAN_RESULT回应,则可能无线电HAL不支持此API。

requestNetworkScan具有与getAvailableNetworks类似的功能。这些功能正在进行高级网络扫描,以查找附近的运营商。调制解调器只是在寻找一组唯一的PLMN(即载波标识符(,并且没有停留在小区上足够长的时间来找到更详细的信息,例如小区标识。

RIL应该能够返回关于小区的一些基本信息,例如频率信道(用于GSM的ARFCN、用于UMTS的UARFCN和用于LTE的EAFCN(和物理小区标识(用于GSM、用于UMTSPSC、用于LTE的PCI(,但它目前似乎没有返回这些值的任何有效信息。

相关内容

  • 没有找到相关文章

最新更新