The component you are missing is a Sync Adapter - they are used to transfer data from an internal service (such as a web server) and insert it into a Content Provider. They also provide the ability to build user accounts and handle authentication in a centralized Account Authenticator (although you can certainly build a stub Authenticator if you don't need that functionality).
Once you've built your authenticator/content provider/sync adapter, you can programmatically create an account (even if it just something like 'Background Sync' for a name) and then run the sync adapter to load your Content Provider with data. For the first run, you probably want to run it on demand:
Account account; // Account created by your application
String AUTHORITY; // AUTHORITY associated with your Content Provider
Bundle settingsBundle = new Bundle();
// Set the flags to make it run right now
settingsBundle.putBoolean(
ContentResolver.SYNC_EXTRAS_MANUAL, true);
settingsBundle.putBoolean(
ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
// Request the sync, causing the Sync Adapter's onPerformSync to be called
ContentResolver.requestSync(account, AUTHORITY, settingsBundle);