Fileprovider 总是抛出 IAE
Fileprovider always throws IAE
我查看了 Whosebug 上的所有答案,但没有找到适合我的答案。
真实设备和模拟器出现同样的错误。
Fileprovider 总是抛出 IllegalArgumentException
有清单
<application
...
<provider
android:name="android.support.v4.content.FileProvider"
android:grantUriPermissions="true"
android:exported="false"
android:authorities="${applicationId}">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepath"/>
</provider>
</application>
有filepath.xml
<paths>
<files-path
name="logs"
path="logs/" /></paths>
并且有代码总是抛出异常
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
File file = new File(logger.getFileName());
Uri uri = null;
try {
uri = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID, file);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
logger.getFileName() - returns真实文件名例如:"logs_22032019.txt"
我已经尝试过的:
清单中的更改,例如:
android:authorities="com.realname.of.package"
filepath.xml
的变化
name="logs"
1) 文件同名 2) 只是 /
路径="logs/"
1) 。 2) / 3) 完整路径 4) 文件 5) /文件 6) 文件/ e.t.g
我注意到的 - 确实有文件路径:
/data/user/0/com.app.realname/files/log.txt
但是其中的 FileProvider 转到:
"log.txt" -> "/data/data/com.app.realname/files/log.txt"-->
注意:我只需要内部存储。
logger.getFileName() - returns real file name for example: "logs_22032019.txt"
这不是有效的文件系统路径。这是一个有效的文件名,但没有说明该文件在设备上的位置。
这是您的 FileProvider
配置:
<files-path
name="logs"
path="logs/" />
为此,可行的 File
是:
File file = new File(getFilesDir(), "logs/"+logger.getFileName());
there is really the path of files... But FileProvider in it goes to
对于主要设备用户,这些是相同的文件系统位置。
我查看了 Whosebug 上的所有答案,但没有找到适合我的答案。
真实设备和模拟器出现同样的错误。
Fileprovider 总是抛出 IllegalArgumentException
有清单
<application
...
<provider
android:name="android.support.v4.content.FileProvider"
android:grantUriPermissions="true"
android:exported="false"
android:authorities="${applicationId}">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepath"/>
</provider>
</application>
有filepath.xml
<paths>
<files-path
name="logs"
path="logs/" /></paths>
并且有代码总是抛出异常
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
File file = new File(logger.getFileName());
Uri uri = null;
try {
uri = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID, file);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
logger.getFileName() - returns真实文件名例如:"logs_22032019.txt"
我已经尝试过的: 清单中的更改,例如: android:authorities="com.realname.of.package" filepath.xml
的变化name="logs"
1) 文件同名 2) 只是 /
路径="logs/"
1) 。 2) / 3) 完整路径 4) 文件 5) /文件 6) 文件/ e.t.g
我注意到的 - 确实有文件路径:
/data/user/0/com.app.realname/files/log.txt
但是其中的 FileProvider 转到:
"log.txt" -> "/data/data/com.app.realname/files/log.txt"-->
注意:我只需要内部存储。
logger.getFileName() - returns real file name for example: "logs_22032019.txt"
这不是有效的文件系统路径。这是一个有效的文件名,但没有说明该文件在设备上的位置。
这是您的 FileProvider
配置:
<files-path
name="logs"
path="logs/" />
为此,可行的 File
是:
File file = new File(getFilesDir(), "logs/"+logger.getFileName());
there is really the path of files... But FileProvider in it goes to
对于主要设备用户,这些是相同的文件系统位置。