如何使FileProvider可用于其他应用程序?

M'h*_*med 8 provider android android-contentresolver android-fileprovider

是否可以将FileProvider用于其他应用程序?

的manifest.xml

...
 <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.example.myapp.fileprovider"
        android:exported="true"
        android:grantUriPermissions="false"
        android:permission="com.example.filesvisible.permission.READ" >
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filespath" />
    </provider>
...
Run Code Online (Sandbox Code Playgroud)

来自doc:

false:提供程序不可用于其他应用程序.设置android:exported ="false"以限制对应用程序的提供程序的访问.只有与提供者具有相同用户ID(UID)的应用程序才能访问它.

我试图将导出设置为true但我得到了这个异常 Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must not be exported为什么我无法导出FileProvider?

Com*_*are 17

是否可以将FileProvider用于其他应用程序?

是.这通常就是重点.

为什么我无法导出FileProvider?

因为那不是你如何使用的FileProvider.

背后的问题FileProvider选择的文件到第三方应用访问.为此,您可以通过FLAG_GRANT_READ_URI_PERMISSION和/或FLAG_GRANT_WRITE_URI_PERMISSIONIntent您使用通过您的供应商的一个Uri值的第三方应用程序(例如,通过ACTION_VIEW Intent与使用startActivity()).

另请参阅共享文件的培训指南.

  • 这是我的代码:这是我的代码:sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_STREAM,FileProvider.getUriForFile(_context,“ ir.khazan.ringtone.fileprovider”,newSoundFile_in_app_folder)); sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); sendIntent.setType(“ audio / *”); Utils.activity.startActivity(sendIntent); (2认同)