Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 文件提供程序未在应用程序目录中保存图像_Android_Save_Photos - Fatal编程技术网

Android 文件提供程序未在应用程序目录中保存图像

Android 文件提供程序未在应用程序目录中保存图像,android,save,photos,Android,Save,Photos,所以我有点受不了了。 起初,我使用了一个简单的意图来捕获一张照片,并使用位图在imageview中显示它保存在extras中。 事实证明,保存此文件以便将其上载到firebase存储非常困难。 我学习了android开发者简单拍照的培训课程。我环顾四周,认为我可能还需要用媒体分数扫描,但实际的照片已经在图库中找到了 我可以创建一个文件,但它是0字节 在gallery应用程序中,我可以看到拍摄的照片,但在file manager和桌面浏览器中,我只能看到一个空文件。我真的不想使用摄像头api 此外

所以我有点受不了了。 起初,我使用了一个简单的意图来捕获一张照片,并使用位图在imageview中显示它保存在extras中。 事实证明,保存此文件以便将其上载到firebase存储非常困难。 我学习了android开发者简单拍照的培训课程。我环顾四周,认为我可能还需要用媒体分数扫描,但实际的照片已经在图库中找到了

我可以创建一个文件,但它是0字节 在gallery应用程序中,我可以看到拍摄的照片,但在file manager和桌面浏览器中,我只能看到一个空文件。我真的不想使用摄像头api

此外,一旦我使用意图拍照,拍照应用程序就会崩溃,然后继续我的应用程序。在文件提供程序之前,它将工作并返回位图 谢谢你的关注

createfilepath方法中的任何代码冗余都是我在用android进行实验 我认为问题在于摄像头应用程序崩溃,但所有caera应用程序都会崩溃,我有自己的代码

<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
<external-path name="my_images" path="Android/data/com.example.testing.app/files/Pictures" />

</paths>
</resources>


public void newImage(){
    if(pic.resolveActivity(getActivity().getPackageManager())!=null) {
        File photoFile = createFilePath();
        if(photoFile!=null){
            Log.d("abc", "newImage: "+photoFile.toString());

            Uri photoURI = FileProvider.getUriForFile(getActivity(),"com.example.testing.app.fileprovider",photoFile);
            Log.d("abc", "newImage: "+photoURI.toString());
            pic.putExtra(MediaStore.EXTRA_OUTPUT,photoURI);
            startActivityForResult(pic,1);
        }

    }
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d("test", "onActivityResult: ");
    if(requestCode==1&&resultCode==RESULT_OK){
    //    galleryAddPic();
        Bundle extra= data.getExtras();
         bit =(Bitmap) extra.get("data");
        Log.d("abc", "onActivityResult: "+extra.get(MediaStore.EXTRA_OUTPUT).toString());
        picture.setImageBitmap(bit);
    }
}


 public File createFilePath(){
    File filepath= getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    Log.d(TAG, "createFilePath: "+ filepath.toString());
    File filepath2 = new File(filepath.getAbsolutePath());
    File filepath3=null;

    try {
         filepath3 = File.createTempFile("temp", ".jpg", filepath4);
        Log.d(TAG, "createFilePath: ");
        return filepath3;
  //      nCurrentPhotoPath = filepath3.getAbsolutePath();
    }catch(IOException e){
        e.printStackTrace();
        Log.d(TAG, "createFilePath: ");
    }

    return filepath3;
}

public void newImage(){
if(pic.resolveActivity(getActivity().getPackageManager())!=null){
File photoFile=createFilePath();
if(photoFile!=null){
Log.d(“abc”,“newImage:+photoFile.toString());
Uri photoURI=FileProvider.getUriForFile(getActivity(),“com.example.testing.app.FileProvider”,photoFile);
Log.d(“abc”,“newImage:+photoURI.toString());
pic.putExtra(MediaStore.EXTRA_输出,photoURI);
startActivityForResult(图1);
}
}
}
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
Log.d(“test”,“onActivityResult:”);
if(requestCode==1&&resultCode==RESULT\u确定){
//galleryAddPic();
Bundle extra=data.getExtras();
位=(位图)额外的.get(“数据”);
Log.d(“abc”、“onActivityResult:”+extra.get(MediaStore.extra_OUTPUT.toString());
picture.setImageBitmap(位);
}
}
公共文件createFilePath(){
文件filepath=getActivity().getExternalFilesDir(Environment.DIRECTORY\u图片);
d(标记“createFilePath:+filepath.toString());
File filepath2=新文件(filepath.getAbsolutePath());
文件filepath3=null;
试一试{
filepath3=File.createTempFile(“temp”、“.jpg”、filepath4);
d(标记“createFilePath:”);
返回文件路径3;
//nCurrentPhotoPath=filepath3.getAbsolutePath();
}捕获(IOE异常){
e、 printStackTrace();
d(标记“createFilePath:”);
}
返回文件路径3;
}
在清单中编辑提供程序

 <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.example.testing.app.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filepaths"/>

    </provider>

功能和权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>


<uses-feature android:name="android.hardware.Camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera2" android:required="false"/>
<uses-feature android:name="android.hardware.location.gps"/>

一种解决方法是删除文件提供程序并获取从intent返回的位图,在ONACTIVE中使用此答案中提供的代码

extra.get(“数据”)
是一个缩略图,
你的真实图像在你创建的文件中。我从清单代码中得到了它