Content providers allow sharing of data between apps by providing a common interface to underlying data. They define a content URI that specifies the location of the data and can be queried to retrieve data in the form of a cursor. Apps must request necessary permissions to access private data from a content provider, such as READ_CONTACTS to read contact details. The content provider handles queries and returns results, which can then be processed by moving through the cursor row by row to access field values.