/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.telephony;

import android.content.Context;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.annotation.IntDef;
import android.util.Log;

import com.android.internal.telephony.ITelephony;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

The caller of TelephonyManager.requestNetworkScan(NetworkScanRequest, Executor, NetworkScanCallback) will receive an instance of NetworkScan, which contains a callback method stopScan() for stopping the in-progress scan.
/** * The caller of * {@link TelephonyManager#requestNetworkScan(NetworkScanRequest, Executor, NetworkScanCallback)} * will receive an instance of {@link NetworkScan}, which contains a callback method * {@link #stopScan()} for stopping the in-progress scan. */
public class NetworkScan { private static final String TAG = "NetworkScan"; // Below errors are mapped from RadioError which is returned from RIL. We will consolidate // RadioErrors during the mapping if those RadioErrors mean no difference to the users.
Defines acceptable values of scan error code.
@hide
/** * Defines acceptable values of scan error code. * @hide */
@Retention(RetentionPolicy.SOURCE) @IntDef({ERROR_MODEM_ERROR, ERROR_INVALID_SCAN, ERROR_MODEM_UNAVAILABLE, ERROR_UNSUPPORTED, ERROR_RADIO_INTERFACE_ERROR, ERROR_INVALID_SCANID, ERROR_INTERRUPTED}) public @interface ScanErrorCode {}
The RIL has successfully performed the network scan.
/** * The RIL has successfully performed the network scan. */
public static final int SUCCESS = 0; // RadioError:NONE
The scan has failed due to some modem errors.
/** * The scan has failed due to some modem errors. */
public static final int ERROR_MODEM_ERROR = 1; // RadioError:RADIO_NOT_AVAILABLE // RadioError:NO_MEMORY // RadioError:INTERNAL_ERR // RadioError:MODEM_ERR // RadioError:OPERATION_NOT_ALLOWED
The parameters of the scan is invalid.
/** * The parameters of the scan is invalid. */
public static final int ERROR_INVALID_SCAN = 2; // RadioError:INVALID_ARGUMENTS
The modem can not perform the scan because it is doing something else.
/** * The modem can not perform the scan because it is doing something else. */
public static final int ERROR_MODEM_UNAVAILABLE = 3; // RadioError:DEVICE_IN_USE
The modem does not support the request scan.
/** * The modem does not support the request scan. */
public static final int ERROR_UNSUPPORTED = 4; // RadioError:REQUEST_NOT_SUPPORTED // Below errors are generated at the Telephony.
The RIL returns nothing or exceptions.
/** * The RIL returns nothing or exceptions. */
public static final int ERROR_RADIO_INTERFACE_ERROR = 10000;
The scan ID is invalid. The user is either trying to stop a scan which does not exist or started by others.
/** * The scan ID is invalid. The user is either trying to stop a scan which does not exist * or started by others. */
public static final int ERROR_INVALID_SCANID = 10001;
The scan has been interrupted by another scan with higher priority.
/** * The scan has been interrupted by another scan with higher priority. */
public static final int ERROR_INTERRUPTED = 10002; private final int mScanId; private final int mSubId;
Stops the network scan Use this method to stop an ongoing scan. When user requests a new scan, a NetworkScan object will be returned, and the user can stop the scan by calling this method.
/** * Stops the network scan * * Use this method to stop an ongoing scan. When user requests a new scan, a {@link NetworkScan} * object will be returned, and the user can stop the scan by calling this method. */
public void stopScan() { ITelephony telephony = getITelephony(); if (telephony == null) { Rlog.e(TAG, "Failed to get the ITelephony instance."); } try { telephony.stopNetworkScan(mSubId, mScanId); } catch (RemoteException ex) { Rlog.e(TAG, "stopNetworkScan RemoteException", ex); } catch (RuntimeException ex) { Rlog.e(TAG, "stopNetworkScan RuntimeException", ex); } }
Deprecated:Use stopScan()
@removed
/** * @deprecated Use {@link #stopScan()} * @removed */
@Deprecated public void stop() throws RemoteException { try { stopScan(); } catch (RuntimeException ex) { throw new RemoteException("Failed to stop the network scan with id " + mScanId); } }
Creates a new NetworkScan with scanId
Params:
  • scanId – The id of the scan
  • subId – the id of the subscription
@hide
/** * Creates a new NetworkScan with scanId * * @param scanId The id of the scan * @param subId the id of the subscription * @hide */
public NetworkScan(int scanId, int subId) { mScanId = scanId; mSubId = subId; } private ITelephony getITelephony() { return ITelephony.Stub.asInterface( ServiceManager.getService(Context.TELEPHONY_SERVICE)); } }