При получении URI отказано в получении разрешения, несмотря на то, что FLAG_GRANT_READ_URI_PERMISSION установлен

У меня есть два приложения для Android A и B. Я передаю файл из приложения A в приложение B и вижу, что приложение B получает URI. Я устанавливаюFLAG_GRANT_READ_URI_PERMISSION флаг в приложении А, и я вижу, что этоmFlags это 1, который является значениемFLAG_GRANT_READ_URI_PERMISSIONиз приложения B. Это все хорошо, но когда я пытаюсь создатьFileInputStream из URI я получаюFileNotFoundException (Permission denied) исключение. Что я делаю неправильно?

Вот соответствующие фрагменты кода:

В приложении А:

public void openTest Intent(String filePath) {
    Intent testIntent = new Intent("com.example.appB.TEST");
    testIntent.addCategory(Intent.CATEGORY_DEFAULT);
    testIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    testIntent.setDataAndType(Uri.parse("file://"+filePath),"text/plain");
    try {
        startActivityForResult(testIntent, OPEN_NEW_TERM);      
    } catch (ActivityNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

В приложении B:

@Override 
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if (intent.getAction().equals("com.example.appB.TEST")) {
        Uri fileUri = intent.getData();
        File srcFile = new File(fileUri.getPath());
        File destFolder = getFilesDir();
        File destFile = new File(destFolder.getAbsolutePath()+srcFile.getName());
        try {
            copyFile(srcFile,destFile);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

public void copyFile(File src, File dst) throws IOException {
    InputStream in = new FileInputStream(src);  //**this is where it dies**
    OutputStream out = new FileOutputStream(dst);

    // Transfer bytes from in to out
    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
        out.write(buf, 0, len);
    }
    in.close();
    out.close();
}

Это когда я создаюin что он получает исключение. Есть мысли о том, почему?

Ответы на вопрос(1)

Ваш ответ на вопрос