簡體   English   中英

/storage/emulated/0/ 上的提供程序

[英]provider on /storage/emulated/0/


我知道這是一個老歌,但我似乎沒有找到管理它的方法......
我必須捕獲相機圖像以供以后的 IO 處理,將其傳輸到網絡共享,但在此之前我失敗了很多……閱讀此處后,我找到了在 KitKat 檢查正在運行的 SDK 上實際執行此操作的方法,並且它有效..但是,現在我也在牛軋糖設備上測試它..

對於牛軋糖,我讀過應該使用提供程序,我正在嘗試......
捕獲的圖像必須存儲在特定文件夾中
“/storage/emulated/0/InsulinPower/amSignTool/Data”
用於以后的 IO 處理......所以我認為必須使用類似的東西,目前沒有外觀..
我查看了所有“區域”的提供者定義,但無法得到我需要的答案,而且我得到了更多的異常......作為定義我得到的檢索 URI
java.lang.reflect.InvocationTargetException
java.lang.IllegalArgumentException:無法找到包含 /storage/emulated/0/InsulinPower/amSignTool/Data/XCAMX-201805171828082115829615.jpg 的配置根

在 file_paths 中,我嘗試了安靜的一切,正如您所看到的...但它僅在我確實引用external-path而不是external-path-files時才有效,這確實似乎是我需要的那個..external-path 代碼是微不足道的....

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>

File storageDir = new File(Environment.getExternalStorageDirectory(),"");
返回 "/storage/emulated/0" // 有效,添加 /InsulinPower/amSignTool/Data 后綴以轉到正確的文件夾...

文件文件 = this.getExternalFilesDir(null);
返回“/storage/emulated/0/Android/data/com.insulinpower.amsigntool/files”//對我無效

任何提示都將非常感謝理解我的錯誤,請原諒我糟糕的英語..
TIA
安德烈亞

捕獲的圖像必須存儲在“/storage/emulated/0/InsulinPower/amSignTool/Data”的特定文件夾中

那是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:哇...謝謝它的工作原理...
我只需要修改我的圖片文件 = GENERIC.amPictureFile(this);
將引用模塊 StringFileName 設置為開始

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


因為我也沒有用“文件:”開始它......
並且因為 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 也有幫助......
非常感謝,你確實很有幫助......真的很感激,因為我剛剛開始了解這個文件提供者的東西
安德烈亞

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM