问题描述
出现以下错误: android.os.FileUriExposedException:file:///storage/emulated/0/temp.jpg通过ClipData.Item.getUri()在应用程序之外公开
当我从选定的AlertDialog中选择“选项摄像机”时
当我尝试从图库中选择照片时出现以下错误: BitmapFactory:无法解码流:java.io.FileNotFoundException:/ storage / emulated / 0(是目录) 画廊打开了,但是我无法选择将其设置为ImageView的图像 这是代码:
public class MainActivity extends AppCompatActivity {
private Button contactsButton,galleryButton;
public static final int gallery_Code = 100;
public static final int Contacts_Code = 101;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactsButton = findViewById(R.id.buttonContacts);
galleryButton = findViewById(R.id.buttongallery);
imageView = findViewById(R.id.imageView);
contactsButton.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkPermission(Manifest.permission.READ_CONTACTS,Contacts_Code);
}
});
galleryButton.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
uploadImage();
}
});
}
private void uploadImage() {
final String[] options = {"Take Photo","Choose from gallery","Cancel"};
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Upload Photo");
builder.setItems(options,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int item) {
if (options[item].equals("Take Photo")) {
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(android.os.Environment.getExternalStorageDirectory(),"temp.jpg");
takePicture.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(f));
startActivityForResult(takePicture,0);
} else if (options[item].equals("Choose from gallery")) {
Intent gallery = new Intent();
gallery.setType("image/*");
gallery.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(gallery,"Select Picture"),1);
} else if (options[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if (resultCode == RESULT_OK) {
if (requestCode == 1) {
File f = new File(Environment.getExternalStorageDirectory().toString());
File[] files = f.listFiles();
if (files != null) {
for (File temp : files) {
if (temp.getName().equals("temp.jpg")) {
f = temp;
break;
}
}
}
try {
Bitmap bitmap;
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(),bitmapOptions);
imageView.setimageBitmap(bitmap);
String path = android.os.Environment
.getExternalStorageDirectory()
+ File.separator
+ "Phoenix" + File.separator + "default";
f.delete();
OutputStream outFile = null;
File file = new File(path,String.valueOf(System.currentTimeMillis()) + ".jpg");
try {
outFile = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG,85,outFile);
outFile.flush();
outFile.close();
} catch (FileNotFoundException e) {
e.printstacktrace();
} catch (IOException e) {
e.printstacktrace();
} catch (Exception e) {
e.printstacktrace();
}
} catch (Exception e) {
e.printstacktrace();
}
} else if (requestCode == 2) {
Uri selectedImage = data.getData();
String[] filePath = {MediaStore.Images.Media.DATA};
Cursor c = getContentResolver().query(selectedImage,filePath,null,null);
c.movetoFirst();
int columnIndex = c.getColumnIndex(filePath[0]);
String picturePath = c.getString(columnIndex);
c.close();
Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));
imageView.setimageBitmap(thumbnail);
}
}
}
private void checkPermission(String readContacts,int contacts_code) {
if (ContextCompat.checkSelfPermission(MainActivity.this,readContacts)
== PackageManager.PERMISSION_DENIED) {
// Requesting the permission
ActivityCompat.requestPermissions(MainActivity.this,new String[]{readContacts},contacts_code);
} else {
Toast.makeText(MainActivity.this,"Permission already granted",Toast.LENGTH_SHORT)
.show();
if (contacts_code == Contacts_Code) {
Intent i = new Intent(MainActivity.this,ContactsActivity.class);
startActivity(i);
} else {
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setType("image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
super
.onRequestPermissionsResult(requestCode,permissions,grantResults);
if (requestCode == gallery_Code) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this,"gallery Permission Granted",Toast.LENGTH_SHORT)
.show();
Intent gallery = new Intent();
gallery.setType("image/*");
gallery.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(gallery,1);
} else {
Toast.makeText(MainActivity.this,"gallery Permission Denied",Toast.LENGTH_SHORT)
.show();
}
} else if (requestCode == Contacts_Code) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this,"Contacts Permission Granted",Toast.LENGTH_SHORT)
.show();
Intent i = new Intent(MainActivity.this,ContactsActivity.class);
startActivity(i);
} else {
Toast.makeText(MainActivity.this,"Contacts Permission Denied",Toast.LENGTH_SHORT)
.show();
}
}
} }
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)