Я реализую приложение, которое взаимодействует через интерфейс AIDL с удаленной службой Foreground. При попытке получить доступ к файлу, созданному приложением в папке внешнего кэша, из службы, я попытался отправить его как URI, упакованный намеренно через AIDL. Я получаю сообщение об ошибке: Отказ в разрешении: открытие поставщика androidx.core.content.FileProvider из ProcessRecord {8a6853 c 852: com.app.service / u0a89} (pid = 852, uid = 10089), который не экспортируется из UID 10090
Код из приложения:
Uri contentUri = FileProvider.getUriForFile(getApplicationContext(),"com.app.fileprovider", myfile);
grantUriPermission("com.app",contentUri,Intent.FLAG_GRANT_READ_URI_PERMISSION);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
recognizer.sendFile(intent); // AIDL proxy call
Код из службы
// AIDL sendFile stub body
Uri uri = intent.getData();
InputStream inputStream = null;
String str = "";
StringBuffer buf = new StringBuffer();
try {
inputStream = getContentResolver().openInputStream(uri);
} catch (FileNotFoundException e) {
Log.d(TAG, "FileNotFoundException");
}
Я настроил манифест в соответствии с указанием Android для поставщика файлов, добавив в Манифест приложения:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.app.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
и file_paths. xml, как показано ниже
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-cache-path name="my_files" path="." />
</paths>
Допустим ли подход для обмена намерениями URI через интерфейс AIDL? может ли здесь сыграть роль тот факт, что моя служба переднего плана не имеет какой-либо активности? Любой дополнительный ввод / руководство здесь может быть полезным.
Спасибо