我正在开发一个特权系统的应用程序来扫描网络。执行API后,结果不包含有效的小区标识信息。所有的值返回要么为0,空或最大INT。
诚然相关的系统特权权限。
代码的提取物:
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。
您可以检查无线电层,以响应您的requestNetworkScan或没有提供有效的小区标识信息。找CMD“亚行logcat -v时间-b广播”电台日志,并检查该日志UNSOL_NETWORK_SCAN_RESULT API的任何事件。下面是这个不请自来的响应的说明。
/**
* 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_NETWORK_SCAN_RESULT都那么很可能无线电HAL是不支持这个API。
该requestNetworkScan
具有类似功能的getAvailableNetworks
。这些功能都在做高层次的网络扫描,以查找附近的载体。调制解调器仅寻找一组唯一的PLMN(即,运营商标识符),并且不停留足够长的时间,以找到更详细的信息的细胞,如小区标识。
所述RIL应该能够返回关于小区的一些基本信息,如频率信道(ARFCN的GSM,UARFCN对于UMTS,和EARFCN为LTE)和一个物理小区标识(BSIC的GSM,PSC对于UMTS,PCI用于LTE)但它似乎并没有返回当前这些值的任何有效信息。