fileprovider未在app目录

时间:2017-02-05 04:52:43

标签: android save photos

所以我有点坚持这个。 起初我使用了一个简单的意图来捕捉照片,并在使用位图的图像视图中显示它可以节省额外的内容。 保存这个以便我可以将它上传到firebase存储是很困难的。 香港专业教育学院在Android开发人员的培训课上简单地拍照。香港专业教育学院环顾四周,认为我可能还需要使用媒体分数进行扫描,但实际的照片已在画廊中找到

我可以创建一个文件,但它是0bytes 在图库应用程序中,我实际上可以看到拍摄的照片,但在文件管理器和桌面浏览器中,我只能看到一个空文件。我真的不想使用相机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;
}

清单中的EDIT提供程序

 <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"/>

2 个答案:

答案 0 :(得分:0)

解决方法是删除文件提供程序并获取意图返回的位图,并使用onactivity使用此答案中提供的代码 code

答案 1 :(得分:0)

extra.get("data")是缩略图, 您的真实图片位于您创建的文件photoFile