这是我正在使用的代码
Intent i = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, cameraData);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
try {
InputStream is = getContentResolver().openInputStream(data.getData());
Main.this.getContentResolver().delete(data.getData(), null,
null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
String error = e.toString();
Dialog d = new Dialog(this);
TextView tv = new TextView(this);
tv.setText(error);
d.setContentView(tv);
d.show();
}
} else {
is = null;
}
}
我这样做是因为我不想将图片保存到dcim文件夹。
它在三星,htc和其他设备上运行良好,但在阿尔卡特一键式5020x Jelly Bean 4.1.1上崩溃了,
返回空指针异常。
有另一种方法可以执行此操作,但不能将图片保存到dcim文件夹。
我已经看到许多解决方案,但是所有解决方案都将图片保存到dcim文件夹
谢谢
最佳答案
我这样做是因为我不想将图片保存到dcim文件夹。
然后在EXTRA_OUTPUT
ACTION_IMAGE_CAPTURE
中包含Intent
,以告知处理请求的相机应用程序将图像放置在何处。引用the documentation:
调用方可以传递一个额外的EXTRA_OUTPUT来控制该图像的写入位置。如果不存在EXTRA_OUTPUT,则会在Extra字段中将一个小型图像作为Bitmap对象返回。
您的代码编写为不执行任何已记录的内容。相反,您假设照相机应用程序将返回图像所在位置的Uri
。这不是已记录的协议的一部分,因此与许多相机应用程序交互时,您的代码将失败。
有另一种方法可以执行此操作,但不能将图片保存到dcim文件夹。
此代码会将图像放置在外部存储设备的另一个位置:
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import java.io.File;
public class CameraContentDemoActivity extends Activity {
private static final int CONTENT_REQUEST=1337;
private File output=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
output=new File(getExternalFilesDir(null), "CameraContentDemo.jpeg");
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output));
startActivityForResult(i, CONTENT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == CONTENT_REQUEST) {
if (resultCode == RESULT_OK) {
// use the output File object
}
}
}
}