Skip to content Skip to sidebar Skip to footer

Fileprovider Is Very Confusing

I have an app in which I capture image and set it to the ImageView and then upload it to the server. But whenever I capture images the image is not getting displayed and when I try

Solution 1:

This is how am doing, this works perfectly.

AndroidManifest.xml

<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="com.yourpackagename.fileprovider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/provider_path"/></provider>

provider_path.xml

<?xml version="1.0" encoding="utf-8"?><paths><external-pathname="/storage/emulated/0"path="."/></paths>

createImageFile() make sure you have read and write external storage permission

private File createImageFile()throws IOException
{

    StringtimeStamp=newSimpleDateFormat("yyyyMMdd_HHmmss").format(newDate());
    StringimageFileName="MYAPPNAME-" + timeStamp + ".png";
    FilemediaStorageDir=newFile(Environment.getExternalStorageDirectory(),
            "YourAppFolder");
    FilestorageDir=newFile(mediaStorageDir + "/Profile_Images");
    if (!storageDir.exists())
    {
        storageDir.mkdirs();
    }
    Fileimage=newFile(storageDir, imageFileName);
    return image;
}

click listener on button to take camera image

===Global Variables===
        Uri mUri; 
privatestaticfinalintCAMERA_IMAGE_RESULT=202;
    privatestaticfinalStringCAPTURE_IMAGE_FILE_PROVIDER="com.yourpackagename.fileprovider";
===Global Variables===

        takeImageBTN.setOnClickListener(newView.OnClickListener()
        {
            @OverridepublicvoidonClick(View v)
            {
                Filefile=null;
                try
                {
                    file = createImageFile();
                    mUri = FileProvider.getUriForFile(this,
                            CAPTURE_IMAGE_FILE_PROVIDER, file);

                    Log.d("uri", mUri.toString());
                    IntentcameraIntent=newIntent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    cameraIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mUri);
                    startActivityForResult(cameraIntent, CAMERA_IMAGE_RESULT);
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }

            }
        });

Then lastly onActivityResult()

@OverrideprotectedvoidonActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode)
    {
        case CAMERA_IMAGE_RESULT:
        {
            if (resultCode == RESULT_OK)
            {
                if (mUri != null)
                {
                    Log.d("uriPath", mUri.getPath().replace("//", "/"));
                    StringprofileImageFilepath= mUri.getPath().replace("//", "/");
                    Log.d("path", profileImageFilepath);
                    profileIV.setImageURI(mUri);
                    /*Your Asynctask to upload Image using profileImageFilepath*/newPostDataAsyncTask().execute(profileImageFilepath);

                }
            }
            break;
        }
    }
}

take run time permission for

<!-- == External Storage == --><uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Post a Comment for "Fileprovider Is Very Confusing"