【问题标题】:requestNetworkScan - returns invalid cell identity - Android PrequestNetworkScan - 返回无效的小区标识 - Android P
【发布时间】:2018-07-24 13:47:12
【问题描述】:

我正在开发一个特权系统应用程序来扫描网络。执行 API 后,结果不包含有效的小区身份信息。所有值都返回为 0、null 或 max 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());
 }

知道为什么会这样吗? 在 Pixel 2 上试过。

【问题讨论】:

    标签: android radio modem ril android-9.0-pie


    【解决方案1】:

    您可以检查无线电层是否响应您的 requestNetworkScan 提供了有效的小区身份信息。通过 cmd "adb logcat -v time -b radio" 获取无线电日志并检查此日志中是否出现 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。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多