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"