TelephonyManager.requestNetworkScan - Android P Предварительный просмотр

Кто-нибудь пробовал этот API? Я разрабатываю привилегированное системное приложение для сканирования сети. По какой-то причине я получаю ошибку 2 "Неправильные параметры", когда пытаюсь его использовать. Предоставил приложению разрешение MODIFY_PHONE_STATE и все равно получил ошибку. Вот выдержка:

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[];
    int bands[];
    ArrayList<String> PLMNIds = new ArrayList<String>(Arrays.asList("42501"));


    TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext()
            .getSystemService(Context.TELEPHONY_SERVICE);

    bands[0] = AccessNetworkConstants.UtranBand.BAND_1;
    radioAccessSpecifiers = new RadioAccessSpecifier[1];
    radioAccessSpecifiers[0] = new RadioAccessSpecifier(
            AccessNetworkConstants.AccessNetworkType.UTRAN,
            bands,
            null);

    networkScanRequest = new NetworkScanRequest(
            NetworkScanRequest.SCAN_TYPE_ONE_SHOT,
            radioAccessSpecifiers,
            0,
            60,
            false,
            0,
            PLMNIds);

    telephonyManager.requestNetworkScan(networkScanRequest, AsyncTask.SERIAL_EXECUTOR,new RadioCallback());
}

}

У кого-нибудь есть идея, какие параметры я передал неправильно? Сначала я подумал, что это может быть проблема LTE / 3G, но я получаю одинаковые результаты как для UTRAN, так и для EUTRAN.

Я также исключил проблему с SIM-картой - такая же ошибка происходит с двумя разными SIM-картами, например, при успешном сканировании приложения настройки формы сети.

1 ответ

Решение

Хорошо, разобрался - для тех, кто может столкнуться с этой проблемой -

searchPeriodicity & incrementalResultsPeriodicity не может быть 0, несмотря на документацию и неактуальность этих параметров для сканирования одним выстрелом.

Другие вопросы по тегам