android - 实现相机意图和缓存有多难?
问题描述
目前正在学习如何制作应用程序。
有一个想法,但我不知道该怎么做或去哪里找。我正在考虑制作一个按钮来打开相机(完成)并拍照,然后上传。我发现了几个示例如何在不保存的情况下上传,但图像质量很差。
我需要的:
- 通过按钮捕获图像并在 imageview 中显示(在 imageview 和上传中显示)
- 暂时保存该图片,直到上传
- 上传后立即删除该图像
- 指导在哪里看
我做了什么:
- 使用 ImageView 的相机意图
- 带有 ImageView 的图库按钮
- 使用 base64 的上传按钮
我不知道camere现在是否可以工作,因为我在其他项目上进行了测试,所以目前正在努力使其在这个项目上工作。
mCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent photoCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(photoCaptureIntent, request);
}
});
解决方案
创建了一个上传方法,在图片上传到 Firebase 后,它将删除保存的临时图片。
这是我的上传方法:
private void UploadImage() {
if(filePath != null)
{
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Įkeliama...");
progressDialog.show();
StorageReference ref = storageReference.child("images/"+ staticSpinner.getSelectedItem().toString().trim()+"_"+ mEditText.getText().toString());
ref.putFile(filePath)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, "Įkelta", Toast.LENGTH_SHORT).show();
mImageView.setImageResource(0);
mImageView.setVisibility(View.GONE);
mEditText.setText("");
mEditText.setVisibility(View.GONE);
staticSpinner.setVisibility(View.GONE);
mCapture.setVisibility(View.VISIBLE);
mChoose.setVisibility(View.VISIBLE);
mUpload.setVisibility(View.GONE);
photoFile = new File(String.valueOf(photoFile));
photoFile.delete();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, "Įkelti nepavyko "+e.getMessage(), Toast.LENGTH_SHORT).show();
mImageView.setImageResource(0);
mImageView.setVisibility(View.GONE);
mEditText.setText("");
mEditText.setVisibility(View.GONE);
staticSpinner.setVisibility(View.GONE);
mCapture.setVisibility(View.VISIBLE);
mChoose.setVisibility(View.VISIBLE);
mUpload.setVisibility(View.GONE);
photoFile = new File(String.valueOf(photoFile));
photoFile.delete();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot
.getTotalByteCount());
progressDialog.setMessage("Įkelta "+(int)progress+"%");
}
});
}
else if(photoFile != null)
{
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Įkeliama...");
progressDialog.show();
StorageReference ref = storageReference.child("images/"+ staticSpinner.getSelectedItem().toString().trim()+"_"+ mEditText.getText().toString());
ref.putFile(Uri.fromFile(photoFile))
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, "Įkelta sėkmingai", Toast.LENGTH_SHORT).show();
mImageView.setImageResource(0);
mImageView.setVisibility(View.GONE);
mEditText.setText("");
mEditText.setVisibility(View.GONE);
staticSpinner.setVisibility(View.GONE);
mCapture.setVisibility(View.VISIBLE);
mChoose.setVisibility(View.VISIBLE);
mUpload.setVisibility(View.GONE);
photoFile = new File(String.valueOf(photoFile));
photoFile.delete();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, "Įkelti nepavyko "+e.getMessage(), Toast.LENGTH_SHORT).show();
mImageView.setImageResource(0);
mImageView.setVisibility(View.GONE);
mEditText.setText("");
mEditText.setVisibility(View.GONE);
staticSpinner.setVisibility(View.GONE);
mCapture.setVisibility(View.VISIBLE);
mChoose.setVisibility(View.VISIBLE);
mUpload.setVisibility(View.GONE);
photoFile = new File(String.valueOf(photoFile));
photoFile.delete();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot
.getTotalByteCount());
progressDialog.setMessage("Įkelta "+(int)progress+"%");
}
});
}
}
推荐阅读
- xml - XML UTF-8 输出中的 jdom2 编码问题
- android - App安装后如何只执行一次后台任务
- android - 从 SQLite DB 填充 ListView 不起作用
- r - 在 data_frame 中将列从 char 转换为 date 时获取 NA
- perforce - Perforce 是否存在任何 API,允许我注册回调以获取有关特定库路径更改的通知?
- mysql - 在 Mysql DB 列中的当前值前面插入数字 0
- android - 即使在应用程序关闭后如何保持警报管理器运行?
- php - 如何将现有数据库迁移到 Doctrine?
- apache-spark - 如何查看数据框所有列的类型
- sql - 尝试在 SQL Server 2016 中传递逗号分隔值时出错