2017-01-26 4 views
1

У меня есть приложение (приложение A), в котором я сохранил текстовый файл (testfile.txt) во внутреннем хранилище (data/data/com.example.mockapp/files) через код.Почему я не могу отправить текстовый файл, хранящийся во внутреннем хранилище моего приложения?

// Create a file in the Internal Storage 
     String content = "hello world"; 
     String filename="testfile.txt"; 
     File file = null; 
     FileOutputStream outputStream; 
     try { 
      file = new File(getFilesDir(), filename); 
      outputStream = new FileOutputStream(file); 
      outputStream.write(content.getBytes()); 
      outputStream.close(); 
     } catch (IOException e) { 
      Log.d("InternalfileException", "we are here in exception"); 
      e.printStackTrace(); 
     } 

Он подтвердил, что файл был создан успешно, и он существует (я проверил)

Примечание: с помощью поставщику файлов для обмена текстового файла.

// XML

<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <files-path path="." name="mockfiles" /> 
</paths> 

// МАНИФЕСТ

<provider 
    android:name="android.support.v4.content.FileProvider" 
    android:authorities="com.example.mock.fileprovider" 
    android:grantUriPermissions="true" 
    android:exported="false"> 
    <meta-data 
     android:name="android.support.FILE_PROVIDER_PATHS" 
     android:resource="@xml/filepaths" /> 
</provider> 

// ЭТО КОДЕКС В ГЛАВНОМ АКТИВНОСТИ ОТПРАВИТЬ Intent

Uri uri = FileProvider.getUriForFile(this, "com.example.mock.fileprovider", file); 
     Intent intent = new Intent(Intent.ACTION_SEND); 
     intent.setType("text/plain"); 
     intent.putExtra(Intent.EXTRA_STREAM, uri); 
     intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
     startActivity(Intent.createChooser(intent, null)); 

Теперь, когда я запустить приложение , он выводит диалог выбора с watsapp, gmail, message и т. д. для опций, но

при нажатии на любую из них он просто показывает ..

1) в случае watsapp - показывает текстовый файл, но он никогда не завершает загрузку

2) в случае Gmail - - показывает txt-файл, который никогда не прикрепляется как вложение, отправляется пустая почта.

Что мне не хватает?

Это сошло с ума до сих пор.

любезно помочь ..

+0

Прочтите здесь информацию о получении правильного URI и предоставлении временных разрешений: https://developer.android.com/reference/android/support/v4/content/FileProvider.html#Permissions –

+0

Если вы работаете на уровне API 15 или ниже, [у вас есть больше работы, чтобы предоставить разрешения] (https://commonsware.com/blog/2016/08/31/granting-permissions-uri-intent-extra.html). Кроме того, [мой 'LegacyCompatCursorWrapper'] (https://github.com/commonsguy/cwac-provider#usage-legacycompatcursorwrapper) помогает некоторым некорректным клиентам. – CommonsWare

+0

@KenWolf, intent.addFlags (Intent.FLAG_GRANT_READ_URI_PERMISSION); этого недостаточно.? – eRaisedToX

ответ

0

То есть что-то делать с file permissions, отсортированные это. Попробуйте обеспечить надлежащее разрешение readwrite, чтобы это сработало. Также убедитесь, что вы правильно заявляете поставщика файлов в manifest.

спасибо!