requestNetworkScan - 返回无效的单元格的身份 - Android的P

问题描述 投票:0回答:2

我正在开发一个特权系统的应用程序来扫描网络。执行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。

android radio modem ril android-9.0-pie
2个回答
0
投票

您可以检查无线电层,以响应您的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。


0
投票

requestNetworkScan具有类似功能的getAvailableNetworks。这些功能都在做高层次的网络扫描,以查找附近的载体。调制解调器仅寻找一组唯一的PLMN(即,运营商标识符),并且不停留足够长的时间,以找到更详细的信息的细胞,如小区标识。

所述RIL应该能够返回关于小区的一些基本信息,如频率信道(ARFCN的GSM,UARFCN对于UMTS,和EARFCN为LTE)和一个物理小区标识(BSIC的GSM,PSC对于UMTS,PCI用于LTE)但它似乎并没有返回当前这些值的任何有效信息。

© www.soinside.com 2019 - 2024. All rights reserved.