Save the date! Android Dev Summit is coming to Sunnyvale, CA on Oct 23-24, 2019.

Android Q privacy: Changes to camera and connectivity

This document describes several restrictions placed on accessing camera and connectivity information. These changes help protect users' privacy.

Some of these changes affect all apps running on Android Q while other changes affect only apps that target Android Q.

Changes affecting all apps

The following changes affect all apps running on Android Q, even if they target Android 9 (API level 28) or lower.

Access to all camera information requires permission

Android Q changes the breadth of information that the getCameraCharacteristics() method returns by default. In particular, your app must have the CAMERA permission in order to access potentially device-specific metadata that is included in this method's return value.

If your app doesn't have the CAMERA permission, it cannot access the following fields:

  • ANDROID_LENS_POSE_ROTATION
  • ANDROID_LENS_POSE_TRANSLATION
  • ANDROID_LENS_INTRINSIC_CALIBRATION
  • ANDROID_LENS_RADIAL_DISTORTION
  • ANDROID_LENS_POSE_REFERENCE
  • ANDROID_LENS_DISTORTION
  • ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE
  • ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE
  • ANDROID_SENSOR_REFERENCE_ILLUMINANT1
  • ANDROID_SENSOR_REFERENCE_ILLUMINANT2
  • ANDROID_SENSOR_CALIBRATION_TRANSFORM1
  • ANDROID_SENSOR_CALIBRATION_TRANSFORM2
  • ANDROID_SENSOR_COLOR_TRANSFORM1
  • ANDROID_SENSOR_COLOR_TRANSFORM2
  • ANDROID_SENSOR_FORWARD_MATRIX1
  • ANDROID_SENSOR_FORWARD_MATRIX2

Restriction on enabling and disabling Wi-Fi

Apps running on Android Q cannot enable or disable Wi-Fi. The WifiManager.setWifiEnabled() method always returns false.

If needed, use a settings panel to prompt users to enable and disable Wi-Fi.

Changes affecting apps targeting Android Q

The following changes affect apps only if they target Android Q.

Wi-Fi network configuration restrictions

To protect user privacy, manual configuration of the list of Wi-Fi networks is now restricted to system apps. If your app targets Android Q, the following methods no longer return useful data:

  • The getConfiguredNetworks() method always returns an empty list.
  • Each network operation method that returns an integer value—addNetwork() and updateNetwork()—always returns -1.
  • Each network operation that returns a boolean value—removeNetwork(), reassociate(), enableNetwork(), disableNetwork(), reconnect(), and disconnect()—always returns false.

If your app needs to connect to Wi-Fi networks, use the following alternative methods:

  • To trigger an instant local connection to a Wi-Fi network, use WifiNetworkSpecifier in a standard NetworkRequest object.
  • To add Wi-Fi networks for consideration for providing internet access to the user, work with WifiNetworkSuggestion objects. You can add and remove networks that appear in the auto-connect network selection dialog by calling WifiManager.addNetworkSuggestions() and WifiManager.removeNetworkSuggestions(), respectively. These methods don't require any location permissions.

Fine location permission needed for telephony, Wi-Fi, Bluetooth APIs

Unless your app has the ACCESS_FINE_LOCATION permission, your app cannot use several methods within the Wi-Fi, Wi-Fi Aware, or Bluetooth APIs when running on Android Q. The following list shows the affected methods.

Telephony

  • TelephonyManager
    • getCellLocation()
    • getAllCellInfo()
    • requestNetworkScan()
    • requestCellInfoUpdate()
    • getAvailableNetworks()
    • getServiceStateForSubscriber
    • getServiceState()
  • TelephonyScanManager
    • requestNetworkScan()
  • PhoneStateListener
    • onCellLocationChanged()
    • onCellInfoChanged()
    • onServiceStateChanged()
  • NetworkScanCallback
    • onResults()

Wi-Fi

  • WifiScanner
    • startScan()
  • WifiManager
    • startScan()
    • getScanResults()
    • getConnectionInfo()
    • getConfiguredNetworks()
  • WifiAwareManager
  • WifiP2pManager
  • WifiRTTManager

Bluetooth

  • BluetoothAdapter
    • startDiscovery()
    • startLeScan()
    • LeScanCallback()