16

ファイルの共有に関するAndroid チュートリアルに従おうとしています。私はこのように設定しましたFileProvider

メインのマニフェスト xml:

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

res/xml/filpaths.xml ファイル:

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="myexternalimages" path="SpCars_album/" />
</paths>

そして、私のコードでは、次のことを試みています:

File requestFile = new File(mImageFilenames[position]);
                try {
                    fileUri = FileProvider.getUriForFile(
                            SeventhActivity.this,
                            "com.example.mysecondapp.fileprovider",
                            requestFile);
                } catch (IllegalArgumentException e) {
                    Log.e("File Selector",
                            "The selected file can't be shared: " +
                                    mImageFilenames[position]);
                }

requestFile は、ファイルの適切な作業パスでインスタンス化されます。そのファイルのパスは、getExternalFilesDir(Environment.DIRECTORY_PICTURES)返されるものから正確に始まります。すべてが適合しているように見えるため、何がエラーを発生させるのか理解できません。前もって感謝します。

4

4 に答える 4

24

そのファイルのパスは、getExternalFilesDir(Environment.DIRECTORY_PICTURES) が返すものと正確に一致します。

私の知る限り、という名前のディレクトリは提供されませんSpCars_album/

すべてが適合しているように見えるため、何がエラーを発生させるのか理解できません。

FileProvider指定したファイルは、定義したルートから提供できるものではありません。


アップデート

これがのドキュメントのバグにFileProvider関連していることを忘れていました。FileProviderからで<external-path>はなく、 からファイルを提供します。をサポートするサブクラスを作成しました。getExternalFilesDir()Environment.getExternalStorageDirectory()StreamProvidergetExternalFilesDir()

my を使用し、 yourをStreamProviderに置き換えると、運が良くなるはずです。<external-path><external-files-path name="myexternalimages" path="Pictures/SpCars_album/" />

于 2013-12-08T15:30:33.293 に答える
9

これは今では古い質問ですが、同様の問題が発生しました。

私が見つけた怠惰な解決策は、単に使用することです:

<external-path name="myexternalimages" path="Android/" />

getExternalStorageDirectory は "/storage/emulated/0/" を返すため、/Android (次のレベル) を共有すると、アプリ内のすべてのファイルにアクセスできるようになります。

または、より正確にしたい場合は、次のようにすることができます。

<external-path name="myexternalimages" path="Android/data/YOUR_BUNDLE_ID/files/SpCars_album" />

これはあまり正しくないように感じますが、機能しているようです。

于 2015-12-10T16:46:29.073 に答える