Java 我使用的是安卓摄像头,如果我点击摄像头按钮,它会打开,但是拍照后,我的应用程序停止了吗?
log cat显示imageUri=getContentResolver()中的错误。此行Java 我使用的是安卓摄像头,如果我点击摄像头按钮,它会打开,但是拍照后,我的应用程序停止了吗?,java,android,eclipse,oop,Java,Android,Eclipse,Oop,log cat显示imageUri=getContentResolver()中的错误。此行 public void startCamera() { Log.d("TDM_CAMERA", "Starting camera on the phone..."); String fileName = "testphoto.jpg"; ContentValues values = new ContentValues(); values.put(MediaStore.Images.Med
public void startCamera() {
Log.d("TDM_CAMERA", "Starting camera on the phone...");
String fileName = "testphoto.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DESCRIPTION,
"Image capture by camera");
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
imageUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(intent, 1337);
}
设置输出文件的方式是可疑的 试着这样做:
02-08 07:32:11.505: E/AndroidRuntime(2136): FATAL EXCEPTION: main
02-08 07:32:11.505: E/AndroidRuntime(2136): java.lang.UnsupportedOperationException: Unknown URI: content://media/external/images/media
02-08 07:32:11.505: E/AndroidRuntime(2136): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:169)
02-08 07:32:11.505: E/AndroidRuntime(2136): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
02-08 07:32:11.505: E/AndroidRuntime(2136): at android.content.ContentProviderProxy.insert(ContentProviderNative.java:420)
02-08 07:32:11.505: E/AndroidRuntime(2136): at android.content.ContentResolver.insert(ContentResolver.java:866)
02-08 07:32:11.505: E/AndroidRuntime(2136): at com.Ibetter.tdm.ReqEditActivity.startCamera(ReqEditActivity.java:597)
02-08 07:32:11.505: E/AndroidRuntime(2136): at com.Ibetter.tdm.ReqEditActivity$4.onClick(ReqEditActivity.java:107)
02-08 07:32:11.505: E/AndroidRuntime(2136): at android.view.View.performClick(View.java:4202)
02-08 07:32:11.505: E/AndroidRuntime(2136): at android.view.View$PerformClick.run(View.java:17340)
02-08 07:32:11.505: E/AndroidRuntime(2136): at android.os.Handler.handleCallback(Handler.java:725)
02-08 07:32:11.505: E/AndroidRuntime(2136): at android.os.Handler.dispatchMessage(Handler.java:92)
02-08 07:32:11.505: E/AndroidRuntime(2136): at android.os.Looper.loop(Looper.java:137)
02-08 07:32:11.505: E/AndroidRuntime(2136): at android.app.ActivityThread.main(ActivityThread.java:5039)
02-08 07:32:11.505: E/AndroidRuntime(2136): at java.lang.reflect.Method.invokeNative(Native Method)
02-08 07:32:11.505: E/AndroidRuntime(2136): at java.lang.reflect.Method.invoke(Method.java:511)
02-08 07:32:11.505: E/AndroidRuntime(2136): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-08 07:32:11.505: E/AndroidRuntime(2136): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-08 07:32:11.505: E/AndroidRuntime(2136): at dalvik.system.NativeStart.main(Native Method)
02-08 07:32:13.935: I/Process(2136): Sending signal. PID: 2136 SIG: 9
02-08 07:32:14.835: E/Trace(2175): error opening trace file: No such file or directory (2)
02-08 07:32:14.835: W/Trace(2175): Unexpected value from nativeGetEnabledTags: 0
还要确保在Android清单中声明使用外部存储:
public void startCamera() throws IOException {
Log.d("TDM_CAMERA", "Starting camera on the phone...");
File photosDir = new File(Environment.getExternalStorageDirectory(), "photos");
if (!photosDir.isDirectory()) {
photosDir.mkdirs();
}
File imageFile = File.createTempFile("testphoto", ".jpg", photosDir);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imageFile));
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(intent, 1337);
}
有关更多信息,请参阅文档中的此页:
我敢打赌
编辑:
您可以在活动中使用以下代码访问它:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
@PaNaVTEC.我没有得到您的答案,日志显示了那一行的错误imageUri=getContentResolver().insert(MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI,values);您是否已将清单设置为访问SD卡?@dinesh707。您能告诉我如何访问SD卡吗?这是我的mainfest.xml\n我没有收到answer@janos-我也使用了你的代码,但是在捕获图像后,我的应用程序停止了,在这个链接有一个完整的@janosOk之前我提到的logcat中显示的问题,所以现在的问题是我们传递到
Uri.fromFile
的URL。请按照我在回答中写的方式尝试,使用Environment.getExternalStorageDirectory()
而不是像我前面建议的那样使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u PICTURES)
。我已经更改了回答中的代码。如果使用更改的代码更新程序,则程序将正常工作,或者logcat中的错误消息将不同。请尝试一下,如果您仍然有问题,请将新的错误消息粘贴到logcat.ya上。它工作正常,谢谢,是否仅保存在SD卡中?如何在活动页面上显示该图像?如何在我的代码中保存SD卡中的图像。请告诉我如何做?我还有一个疑问,这是否可能在拍照后在同一页中显示图像,并且图像必须在该页中显示。如何显示?是的,使用此代码:我要将您的代码与该代码一起使用吗?两者都有所不同,它们没有设置任何像getImageUri()这样的调用函数。我如何编写?我想用该代码添加您的代码,或者我想单独使用该代码就可以了
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.capture);
Button capture = (Button) findViewById(R.id.capture_button);
capture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// We use the stock camera app to take a photo
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri());
startActivityForResult(intent, TAKE_PHOTO_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {
Uri imagePath = getImageUri();
doSomething();
}
}
/**
* Get the uri of the captured file
* @return A Uri which path is the path of an image file, stored on the dcim folder
*/
private Uri getImageUri() {
// Store image in dcim
File file = new File(Environment.getExternalStorageDirectory() + "/DCIM", CAPTURE_TITLE);
Uri imgUri = Uri.fromFile(file);
return imgUri;
}