he device API level. Additionally, WorkManager does not require
Play services and provides several advanced features, such as chaining tasks
together or checking a task's status. To learn more, see [ WorkManager
](/arch/work) .

###  Monitor network connectivity while the app is running

Apps that are running can still listen for ` CONNECTIVITY_CHANGE ` with a
registered ` [ BroadcastReceiver
](/reference/android/content/BroadcastReceiver) ` . However, the ` [
ConnectivityManager ](/reference/android/net/ConnectivityManager) ` API
provides a more robust method to request a callback only when specified
network conditions are met.

` [ NetworkRequest ](/reference/android/net/NetworkRequest) ` objects define
the parameters of the network callback in terms of ` [ NetworkCapabilities
](/reference/android/net/NetworkCapabilities) ` . You create ` [
NetworkRequest ](/reference/android/net/NetworkRequest) ` objects with the ` [
NetworkRequest.Builder ](/reference/android/net/NetworkRequest.Builder) `
class. ` [ registerNetworkCallback()
](/reference/android/net/ConnectivityManager#registerNetworkCallback\(android.net.NetworkRequest,
android.net.ConnectivityManager.NetworkCallback\)) ` then passes the ` [
NetworkRequest ](/reference/android/net/NetworkRequest) ` object to the
system. When the network conditions are met, the app receives a callback to
execute the ` [ onAvailable()
](/reference/android/net/ConnectivityManager.NetworkCallback#onAvailable\(android.net.Network\))
` method defined in its ` [ ConnectivityManager.NetworkCallback
](/reference/android/net/ConnectivityManager.NetworkCallback) ` class.

The app continues to receive callbacks until either the app exits or it calls
` [ unregisterNetworkCallback()
](/reference/android/net/ConnectivityManager#unregisterNetworkCallback\(android.app.PendingIntent\))
` .

##  Restrictions on receiving image and video broadcasts

In Android 7.0 (API level 24), apps are not able to send or receive ` [
ACTION_NEW_PICTURE ](/reference/android/hardware/Camera#ACTION_NEW_PICTURE) `
or ` [ ACTION_NEW_VIDEO ](/reference/android/hardware/Camera#ACTION_NEW_VIDEO)
` broadcasts. This restriction helps alleviate the performance and user
experience impacts when several apps must wake up in order to process a new
image or video. Android 7.0 (API level 24) extends ` [ JobInfo
](/reference/android/app/job/JobInfo) ` and ` [ JobParameters
](/reference/android/app/job/JobParameters) ` to provide an alternative
solution.

###  Trigger jobs on content URI changes

To trigger jobs on content URI changes, Android 7.0 (API level 24) extends the
` [ JobInfo ](/reference/android/app/job/JobInfo) ` API with the following
methods:

` JobInfo.TriggerContentUri() `

     Encapsulates parameters required to trigger a job on content URI changes. 
` JobInfo.Builder.addTriggerContentUri() `

     Passes a ` TriggerContentUri ` object to ` [ JobInfo ](/reference/android/app/job/JobInfo) ` . A ` [ ContentObserver ](/reference/android/database/ContentObserver) ` monitors the encapsulated content URI. If there are multiple ` TriggerContentUri ` objects associated with a job, the system provides a callback even if it reports a change in only one of the content URIs. 
     Add the ` TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS ` flag to trigger the job if any descendants of the given URI change. This flag corresponds to the ` notifyForDescendants ` parameter passed to ` [ registerContentObserver() ](/reference/android/content/ContentResolver#registerContentObserver\(android.net.Uri, boolean, android.database.ContentObserver\)) ` . 

**Note:** ` TriggerContentUri() ` cannot be used in combination with ` [
setPeriodic()
](/reference/android/app/job/JobInfo.Builder#setPeriodic\(long\)) ` or ` [
setPersisted()
](/reference/android/app/job/JobInfo.Builder#setPersisted\(boolean\)) ` . To
continually monitor for content changes, schedule a new ` [ JobInfo
](/reference/android/app/job/JobInfo) ` before the app’s ` [ JobService
](/ref