2017-10-11 6 views
1

私は恐らく愚かな質問ですが、私は本当に答えを見つけることができません。私が作成したばかりのファイルからUriを入手してください(アンドロイド)

EditTextの内容をhtmlファイルとして保存し、他のアプリケーションと共有するためのプログラムが必要です。これを行うには、ファイルを内部ストレージに書き込んだ後、そのファイルにURIを取得する必要があります。しかし、それを行う方法についてはどこにも情報はありません。

これは私のコード(編集アクティビティの名前であることと、パッケージをMYAPP)である:

String filename = "Lorem ipsum.html"; 

      FileOutputStream outputStream; 

      try { 
       outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
       outputStream.write(Html.toHtml(textField.getText()).getBytes()); 
       outputStream.close(); 
       System.out.println(filename); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

       Intent shareIntent = ShareCompat.IntentBuilder.from(Editor.this) 
         .setStream(FileProvider.getUriForFile(Editor.this, "com.myapp.fileprovider", new File(filename))) 
         .getIntent(); 
       shareIntent.setData(FileProvider.getUriForFile(Editor.this, "com.myapp.fileprovider", new File(filename))); 
       shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
      startActivity(shareIntent); 

私の知る限り、ファイル作成部は、うまく動作します。例外は捕捉されません。 URIを検索しようとしたとき、私は明らかに間違って何かをやっている

java.lang.IllegalArgumentException: Failed to find configured root that contains /Lorem ipsum.html 

を、私は解決策を見つけることができませんしてきた:しかし、実際の共有部分は、このエラーでクラッシュします。公式の文書に続いて助けにならなかったので、私はこの特定の問題の例を見つけることができませんでした。

それが重要ならば、ここに私のfileprovider宣言は次のとおりです。

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

は、任意の助けを事前にありがとうございます。あなたのコードで

答えて

2

:無効である

new File("Lorem ipsum.html""); 

FileProvider.getUriForFile(Editor.this, "com.myapp.fileprovider", new File(filename)) 

3番目のパラメータは同等です。

Fileのコンストラクタのパラメータとして、ファイルの完全パスを使用する必要があります。 @Fatihでコメントしたよう

あなたは三番目のパラメータとして

new File(getFilesDir(), filename) 

を使用する必要があります。

また、マニフェストにごauthoritiesパラメータは以下のように修正する必要があります。

android:authorities="${applicationId}.provider" 

だからあなたの最後の文は次のようになります。しかし私の問題の一部だ

Uri uri= FileProvider.getUriForFile(Editor.this, 
     getApplicationContext().getPackageName() + ".provider", 
     new File(Editor.this.getFilesDir(), filename)); 
+0

- 私はパスが何であるか見当がつかないそれを見つける方法 – Sauron

+0

あなたの携帯電話にあるファイルはどこですか? –

+0

私が作成したばかりのファイルにアクセスしようとしていますが(コードを投稿して)、アプリがどこに保存しているかわかりません。 – Sauron

関連する問題