我知道这是一个老事,但我似乎找不到办法来管理它......
我必须捕获相机图像以供以后 IO 处理,将其传输到网络共享,但在此之前我失败了很多......
阅读完此处后,我找到了在 KitKat 上检查正在运行的 SDK 实际执行此操作的方法,并且它有效。
但是,现在我也在 Nougat 设备上测试它..
对于牛轧糖,我读过应该使用提供程序,并且我正在尝试...
捕获的图像必须存储在特定的文件夹中
“/存储/模拟/0/InsulinPower/amSignTool/数据”
用于稍后的 IO 处理...所以我认为类似于
必须用,目前没看..
我查看了所有“区域”的提供者定义,但无法得到我需要的答案,而且我得到了更多例外......定义我得到的检索 URI
java.lang.reflect.InitationTargetException
java.lang.IllegalArgumentException:无法找到包含 /storage/emulated/0/InsulinPower/amSignTool/Data/XCAMX-201805171828082115829615.jpg 的配置根目录
在 file_paths 中,我尝试安静所有内容,如您所见...但只有当我引用 external-path 而不是 external-path-files 时,它才有效,这确实似乎是我需要的..external -小路
代码很简单......
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (cameraIntent.resolveActivity(getPackageManager()) != null) {
File pictureFile = null;
try {
pictureFile = GENERIC.amPictureFile(this);
} catch (IOException ex) {
// Error occurred while creating the File
Toast.makeText(this, "Create file failed!", Toast.LENGTH_SHORT).show();
}
if (pictureFile != null) {
//https://stackoverflow.com/questions/40087944/content-uri-crashes-camera-on-android-kitkat
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT){
this.imageToUploadUri = Uri.fromFile(pictureFile);
} else {
this.imageToUploadUri = FileProvider.getUriForFile(this,"com.insulinpower.android.fileprovider", pictureFile); // <-- THIS statement crashes with the indicated exception
}
//\ https://stackoverflow.com/questions/40087944/content-uri-crashes-camera-on-android-kitkat
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageToUploadUri);
startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
}
// file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Share folder under public external storage folder.The base folder is Environment.getExternalStorageDirectory()-->
<!--external-path name="my_data" path="InsulinPower/amSignTool/Data/" /> -->
<external-files-path name="my_data" path="/InsulinPower/amSignTool/Data/" />
<!-- external-files-path name="my_data" path="InsulinPower/amSignTool/Data/" / -->
<!-- external-files-path name="my_data" path="/" /-->
</paths>
// manifest
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.insulinpower.android.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"></meta-data>
</provider>
文件存储目录 = new File(Environment.getExternalStorageDirectory(),"");
返回“/storage/emulated/0” // 有效,添加 /InsulinPower/amSignTool/Data 后缀以转到正确的文件夹...
文件 file = this.getExternalFilesDir(null);
返回“/storage/emulated/0/Android/data/com.insulinpower.amsigntool/files”//对我无效
任何提示都将非常感谢理解我的错误,请原谅我糟糕的英语..
TIA
安德里亚
捕获的图像必须存储在特定的文件夹中 “/存储/模拟/0/InsulinPower/amSignTool/数据”
那就是
new File(Environment.getExternalStorageDirectory(), "InsulinPower/amSignTool/Data")
。
但只有当我引用外部路径而不是外部路径文件时它才有效,这似乎确实是我需要的
正确。尝试:
<external-path name="my_data" path="/InsulinPower/amSignTool/Data/" />
考虑到您想要文件存放的位置,您肯定需要
<external-path>
,而不是 <external-files-path>
。
您还需要:
cameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
在开始活动之前。否则,相机应用程序无权写入此位置。
@CommonsWare:哇...谢谢,它有效...
我只需要修改我的 pictureFile = GENERIC.amPictureFile(this);
将引用模块 StringFileName 设置为启动为
this.m_PictureFilePath = "file:" + pictureFile.getAbsolutePath();
因为我也没有用“file:”开始它......
并且 GENERIC.amPictureFile(this) 已经指向 Environment.getExternalStorageDirectory() + "/Insulin...../"
我必须修改
<external-path name="my_data" path="/InsulinPower/amSignTool/Data/" />
到
<external-path name="my_data" path="." />
因为我认为要理解文件创建已经指向根目录的子文件夹,并且在提供程序和文件创建中将其加倍应该对折叠进行子嵌套...或者这是我的理解..
https://inthecheesefactory.com/blog/how-to-share-access-to-file-with-fileprovider-on-android-nougat/en也有帮助......
非常感谢你,你确实非常有帮助......真的很感激,因为我刚刚开始理解这个文件提供者的东西
安德里亚
你好梅拉先生移动马空间清洁卡塔萨梅梅拉计算器隐藏文件sa照片aur视频删除ho gaya hai太恢复kaisa kara