Android.os.fileuriexposedexception: File:///storage/emulated/0/pictures/picfolder/1.jpg Exposed Beyond App Through Clipdata.item.geturi()
I am trying to take a photo from the phone's camera using this code: activity_main.xml: Copy
2) Then create a provider_paths.xml file in res/xml folder. Folder may be needed to created if it doesn't exist.
<paths><external-pathname="external_files"path="."/></paths>
3) Now edit your activity class file as below:
UrioutputFileUri= Uri.fromFile(newfile);
to
UrioutputFileUri= FileProvider.getUriForFile(MainActivity.this, BuildConfig.APPLICATION_ID, newfile);
UPDATE #1
Update your MainActivity.java with this:
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
publicclassMainActivityextendsAppCompatActivity {
// private MyTessOCR mTessOCR = new MyTessOCR(MainActivity.this);private Button takePictureButton;
private ImageView imageView;
intTAKE_PHOTO_CODE=0;
publicstaticintcount=0;
@OverrideprotectedvoidonCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (checkPermissions()){
// permissions granted.
}
finalStringdir= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/";
Filenewdir=newFile(dir);
if (!newdir.exists()) {
newdir.mkdir();
}
Buttoncapture= (Button) findViewById(R.id.btnCapture);
capture.setOnClickListener(newView.OnClickListener() {
publicvoidonClick(View v) {
// Here, the counter will be incremented each time, and the// picture taken by camera will be stored as 1.jpg,2.jpg// and likewise.
count++;
Stringfile= dir+count+".jpg";
Filenewfile=newFile(file);
try {
newfile.createNewFile();
}
catch (IOException e)
{
}
// Uri outputFileUri = Uri.fromFile(newfile);UrioutputFileUri= FileProvider.getUriForFile(MainActivity.this, BuildConfig.APPLICATION_ID, newfile);
IntentcameraIntent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(cameraIntent, TAKE_PHOTO_CODE);
}
});
}
@OverrideprotectedvoidonActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {
Log.d("CameraDemo", "Pic saved");
}
}
publicstaticfinalintMULTIPLE_PERMISSIONS=10; // code you want.
String[] permissions= newString[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION};
privatebooleancheckPermissions() {
int result;
List<String> listPermissionsNeeded = newArrayList<>();
for (String p:permissions) {
result = ContextCompat.checkSelfPermission(MainActivity.this,p);
if (result != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(p);
}
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(newString[listPermissionsNeeded.size()]),MULTIPLE_PERMISSIONS );
returnfalse;
}
returntrue;
}
@OverridepublicvoidonRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MULTIPLE_PERMISSIONS:{
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
// permissions granted.
} else {
// Toast.makeText(this, "Go to settings and enable permissions", Toast.LENGTH_LONG)// .show();
}
// permissions list of don't granted permission
}
return;
}
}
privatevoiddoOCR()
{
// String temp = mTessOCR.getOCRResult(bitmap);
}
}
Solution 2:
Try this! Just paste the below code in activity onCreate()
StrictMode.VmPolicy.Builderbuilder=newStrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
It will ignore URI exposure
Post a Comment for "Android.os.fileuriexposedexception: File:///storage/emulated/0/pictures/picfolder/1.jpg Exposed Beyond App Through Clipdata.item.geturi()"