Отказано в доступе при доступе к файлу, расположенному в каталоге кэша приложения, из отдельной службы переднего плана - PullRequest
0 голосов
/ 20 февраля 2020

Я реализую приложение, которое взаимодействует через интерфейс 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? может ли здесь сыграть роль тот факт, что моя служба переднего плана не имеет какой-либо активности? Любой дополнительный ввод / руководство здесь может быть полезным.

Спасибо

...