Android 提供程序位于/存储/模拟/0上/

Android 提供程序位于/存储/模拟/0上/,android,android-external-storage,android-fileprovider,Android,Android External Storage,Android Fileprovider,我知道这是一个老生常谈,但我似乎没有找到管理它的方法… 我必须捕获一个摄像头图像,以便稍后进行IO处理,将其传输到网络共享,但在此之前我失败了很多。。。 在阅读了本文之后,我找到了在KitKat上实际执行此操作的方法,并检查了正在运行的SDK,它很有效。。 但是,现在我也在牛轧糖装置上测试它。 对于牛轧糖,我读到应该使用供应商,我正在尝试… 捕获的图像必须存储在特定文件夹中,该文件夹为 “/storage/simulated/0/InsulinPower/amSignTool/Data” 对于以


我知道这是一个老生常谈,但我似乎没有找到管理它的方法…
我必须捕获一个摄像头图像,以便稍后进行IO处理,将其传输到网络共享,但在此之前我失败了很多。。。 在阅读了本文之后,我找到了在KitKat上实际执行此操作的方法,并检查了正在运行的SDK,它很有效。。 但是,现在我也在牛轧糖装置上测试它。

对于牛轧糖,我读到应该使用供应商,我正在尝试…
捕获的图像必须存储在特定文件夹中,该文件夹为
“/storage/simulated/0/InsulinPower/amSignTool/Data”
对于以后的IO处理。。。所以我认为类似于 必须使用,当前没有外观。
我查看了所有“区域”的提供者定义,但无法得到我需要的答案,而且还有更多例外。。在定义检索URI时,我得到了
java.lang.reflect.InvocationTargetException
java.lang.IllegalArgumentException:未能找到包含/storage/emulated/0/InsulinPower/amSignTool/Data/XCAMX-201805171828082115829615.jpg的配置根目录

在文件路径中,我尝试使所有内容安静下来,如您所见。。。但是,只有当我引用了外部路径而不是外部路径文件时,它才起作用。外部路径确实是我需要的文件 代码很简单

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>
Intent-cameraIntent=newintent(MediaStore.ACTION\u-IMAGE\u-CAPTURE);
if(cameraIntent.resolveActivity(getPackageManager())!=null){
文件pictureFile=null;
试一试{
pictureFile=GENERIC.amPictureFile(此文件);
}捕获(IOEX异常){
//创建文件时出错
Toast.makeText(此“创建文件失败!”,Toast.LENGTH_SHORT.show();
}
如果(pictureFile!=null){
//https://stackoverflow.com/questions/40087944/content-uri-crashes-camera-on-android-kitkat
如果(Build.VERSION.SDK_INT
捕获的图像必须存储在特定的文件夹中,该文件夹是
“/storage/simulated/0/InsulinPower/amSignTool/Data”

这是新文件(Environment.getExternalStorageDirectory(),“InsulinPower/amSignTool/Data”)

但它只有在引用外部路径而不是外部路径文件时才起作用,而外部路径文件似乎正是我所需要的

正确。请尝试:

<external-path name="my_data" path="/InsulinPower/amSignTool/Data/" />
在您开始活动之前。否则,摄像头应用程序无权写入此位置

捕获的图像必须存储在特定的文件夹中,该文件夹是 “/storage/simulated/0/InsulinPower/amSignTool/Data”

这是新文件(Environment.getExternalStorageDirectory(),“InsulinPower/amSignTool/Data”)

但它只有在引用外部路径而不是外部路径文件时才起作用,而外部路径文件似乎正是我所需要的

正确。请尝试:

<external-path name="my_data" path="/InsulinPower/amSignTool/Data/" />

在您开始活动之前。否则,摄像头应用程序无权写入此位置。

@commonware:wow…感谢它的工作…
我只需要修改pictureFile=GENERIC.amPictureFile(这个);
将引用模块StringFileName设置为以
开头

this.m_PictureFilePath = "file:" + pictureFile.getAbsolutePath(); 

因为我也没有以“文件:”开头…
正如GENERIC.amPictureFile(这个)已经指向Environment.getExternalStorageDirectory()+“/Insulin…./”
我不得不修改

<external-path name="my_data" path="/InsulinPower/amSignTool/Data/" />





我认为,要理解文件创建已经指向根目录的子文件夹,在提供程序和文件创建中对其进行double应该是子嵌套折叠…或者这是我的理解..

也有帮助…
非常感谢您,您确实帮了我很大的忙……非常感谢“因为我刚刚开始理解这个文件提供商的东西

Andrea

@commonware:哇……谢谢,它能用了……
我只需要修改pictureFile=GENERIC.amPictureFile(这个);
将引用模块StringFileName设置为以
开头

this.m_PictureFilePath = "file:" + pictureFile.getAbsolutePath(); 

因为我也没有以“文件:”开头…
正如GENERIC.amPictureFile(这个)已经指向Environment.getExternalStorageDirectory()+“/Insulin…./”
我不得不修改

<external-path name="my_data" path="/InsulinPower/amSignTool/Data/" />





我认为,要理解文件创建已经指向根目录的子文件夹,在提供程序和文件创建中对其进行double应该是子嵌套折叠…或者这是我的理解..

也有帮助…
非常感谢您,您确实帮了我很大的忙……非常感谢“因为我刚刚开始理解这个文件提供商的东西

Andrea

或者……如果我以后可以通过文件imgFile=new file(imageToUploadUri.getPath())访问外部路径中生成的文件,然后再访问imgFile.renameTo(myFolder\u in_external\u storage),我也会很感激,但是文件imgFile=new file(路径\u in_external\u path\u无效)或者…如果我以后可以通过文件imgFile=new file(imageToUploadUri.getPath())访问外部路径中生成的文件,然后再访问imgFile.renameTo(外部存储中的myFolder),我也会很感激,但是文件imgFile=new file(外部路径中的路径无效)