从Android中的相机或图库上传照片

问题描述

出现以下错误: 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 (将#修改为@)