2017-03-19 5 views
0

あまりにも繰り返し質問を申し訳なく思っていますが、ここでの答えがstackoverflowで本当に助けてくれました。含まれている構成済みのルートを見つけることができません

FileProviderを使用して、カスタムフォルダへのファイルにアクセスします。 provider_paths.xml

<paths> 
    <cache-path name="my_videos" path="MyFolderName/"/> 
</paths> 

(私は試した、代わりのcache-pathfiles-pathexternal-pathexternal-files-path

作成におけるその後

<provider 
    android:name="android.support.v4.content.FileProvider" 
    android:authorities="my.package.name.provider" 
    android:exported="false"    
    android:grantUriPermissions="true"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/provider_paths" /> 
</provider> 

:マニフェストに、<application>タグ内私の宣言のファイル:

public static Uri getUriFromFile(File file, Context context) { 
    int flags = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION; 
    Uri uri = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", file); 
    context.grantUriPermission(context.getPackageName(), uri, flags); 
    return uri; 
} 

public static File getMyDirectory() { 
    File root = new File(context.getCacheDir(), "MyFolderName"); 
    if(root.mkdir()) Log.e(Consts.TAG, "Directory created"); 
    return root; 
} 

... 

File outputFile = new File(getMyDirectory(), filename + ".mp4"); 
videoUri = getUriFromFile(outputFile, this); 

(及び、代わりにcontext.getCacheDir()、私はcontext.getFilesDir()Environment.getExternalStorageDirectory()context.getExternalFilesDir("")を試してみました)

そして最後に、私は自分のファイルを取得したい:

パスを試してみました
String pathToFile = "/my_videos/filename.mp4"; 
Uri file = getUriFromFile(new File(pathToFile), context); 

"/MyFolderName/filename.mp4" 
"content://my.package.name.provider/my_videos/filename.mp4" 
"content://my.package.name.provider/MyFolderName/filename.mp4" 

この試行はすべて私にこのエラーをもたらしました:

Failed to find configured root that contains /my_videos/filename.mp4 

私が間違っていることは何ですか?前もって感謝します!

答えて

1

I want to retrieve my file:

これらはどれもファイルへの有効なパスではありません。

File outputFile = new File(getMyDirectory(), filename + ".mp4"); 

だから、あなたはすでに書いたコードを使用します。

は、あなたはすでにあなたのファイルへの有効なパスを与えるコードを持っています。

+0

同じ行をもう一度使用することは考えませんでした。実際に、第三者の図書館から私の質問で見られる 'pathToFile'が返ってきたのですが、なぜ私はすでにその行を使っているのですか?私はすでに道があります! 行のファイル名部分のみを使用して行を処理しました。どうもありがとう! –

関連する問題