### Access Remote Preferences Source: https://github.com/apsun/remotepreferences/blob/master/README.md Create a RemotePreferences instance using the same authority and preference file name to access shared preferences from another app. This example shows how to retrieve an integer preference. ```java SharedPreferences prefs = new RemotePreferences(context, "com.example.app.preferences", "main_prefs"); int value = prefs.getInt("my_int_pref", 0); ``` -------------------------------- ### Implement RemotePreferenceProvider Source: https://github.com/apsun/remotepreferences/blob/master/README.md Subclass RemotePreferenceProvider and implement a 0-argument constructor. Call the super constructor with an authority and an array of preference files to expose. ```java public class MyPreferenceProvider extends RemotePreferenceProvider { public MyPreferenceProvider() { super("com.example.app.preferences", new String[] {"main_prefs"}); } } ``` -------------------------------- ### Add Direct Boot Support in Manifest Source: https://github.com/apsun/remotepreferences/blob/master/README.md Add the 'android:directBootAware="true"' attribute to the provider declaration in your AndroidManifest.xml to enable direct boot support. ```XML ``` -------------------------------- ### Run Connected Android Tests Source: https://github.com/apsun/remotepreferences/blob/master/README.md Execute connected tests on an Android device using Gradle. Ensure your device is connected before running. ```bash ./gradlew :testapp:connectedAndroidTest ``` -------------------------------- ### Configure AndroidManifest.xml Source: https://github.com/apsun/remotepreferences/blob/master/README.md Add a provider entry to your AndroidManifest.xml. Ensure android:authorities matches the authority used in your provider, and set android:exported to true. ```xml ``` -------------------------------- ### Mark Preference File as Device Protected Source: https://github.com/apsun/remotepreferences/blob/master/README.md Modify the provider constructor to mark the preference file as device protected. This ensures preferences are accessible before the first user unlock after reboot. ```Java public class MyPreferenceProvider extends RemotePreferenceProvider { public MyPreferenceProvider() { super("com.example.app.preferences", new RemotePreferenceFile[] { new RemotePreferenceFile("main_prefs", /* isDeviceProtected */ true) }); } } ``` -------------------------------- ### Enable Strict Mode for RemotePreferences Source: https://github.com/apsun/remotepreferences/blob/master/README.md Opt-in to strict mode by passing 'true' as the fourth argument to the RemotePreferences constructor. This will throw exceptions for access errors instead of silently failing. ```Java SharedPreferences prefs = new RemotePreferences(context, authority, prefFileName, true); ``` -------------------------------- ### Access Shared Preferences from Device Protected Storage Source: https://github.com/apsun/remotepreferences/blob/master/README.md Use `createDeviceProtectedStorageContext()` to obtain a context for accessing device-protected preferences. This is necessary for apps needing to access preferences before the first user unlock. ```Java Context prefContext = context.createDeviceProtectedStorageContext(); SharedPreferences prefs = prefContext.getSharedPreferences("main_prefs", MODE_PRIVATE); ``` -------------------------------- ### Add RemotePreferences Dependency Source: https://github.com/apsun/remotepreferences/blob/master/README.md Add this dependency to your app's build.gradle file to include RemotePreferences. ```gradle repositories { mavenCentral() } dependencies { implementation 'com.crossbowffs.remotepreferences:remotepreferences:0.8' } ``` -------------------------------- ### Handle RemotePreferenceAccessException Source: https://github.com/apsun/remotepreferences/blob/master/README.md Wrap preference access and modification calls within a try-catch block to handle potential `RemotePreferenceAccessException` when strict mode is enabled. This allows for graceful error handling. ```Java try { int value = prefs.getInt("my_int_pref", 0); prefs.edit().putInt("my_int_pref", value + 1).apply(); } catch (RemotePreferenceAccessException e) { // Handle the error } ``` -------------------------------- ### Override checkAccess for Custom Security Source: https://github.com/apsun/remotepreferences/blob/master/README.md Implement custom logic to control read/write access to specific preferences based on the calling package and preference key. This method is powerful for fine-grained access control. ```Java @Override protected boolean checkAccess(String prefFileName, String prefKey, boolean write) { // Only allow read access if (write) { return false; } // Only allow access to certain preference keys if (!"my_pref_key".equals(prefKey)) { return false; } // Only allow access from certain apps if (!"com.example.otherapp".equals(getCallingPackage())) { return false; } return true; } ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.