我想要Camera Intent
,除了Sony C2305
[4.2.2]之外,它在其他设备上完美运行。在4.2.2模拟器上测试,完美无缺。
以下是片段。我用来拨打Camera Intent
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
getImagePath();
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, REQUEST_CAMERA);
public void getImagePath()
{
File imageDirectory =null;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state))
{
imageDirectory = new File(Environment.getExternalStorageDirectory().getPath()+"/ABC");
}
else
{
imageDirectory = new File(SmartConsultant.getApplication().getApplicationContext().getFilesDir().getAbsolutePath());
}
imageDirectory.mkdirs();
File tempFile = new File(imageDirectory, getVideoName()+ AppConstants.EXTENSION); //AppConstants.Extension is .jpg and getVideoName to fetch name of file as per current sys time.
outputFileUri = Uri.fromFile( tempFile );
currentFileUri = outputFileUri;
}
获取活动结果:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CAMERA) {
if(resultCode == RESULT_OK)
{
BitmapFactory.Options btmapOptions = new BitmapFactory.Options();
btmapOptions.inSampleSize = 2;
bm = BitmapFactory.decodeFile(currentFileUri.getPath(), btmapOptions);
NewExpensesActivity.this.data.add(bm);
imagesAdapter.notifyDataSetChanged();
compressedPath = ImageCompression.compressImage(currentFileUri.getPath());//ADDED 10018
galleryAddPic();
paths.add(compressedPath);//EDITED 10018
}
}
}
但它会在提供结果时抛出Null Pointer Exception Log Cat:
java.lang.RuntimeException: Unable to resume activity {com.smarthumanoid.com/com.netdoers.com.ui.AddSxActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=-1, data=Intent { act=inline-data dat=file:///storage/sdcard0/SmartConsultant/20140217194718.jpg typ=image/jpeg (has extras) }} to activity {com.smarthumanoid.com/com.netdoers.com.ui.AddSxActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2899)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2928)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3865)
at android.app.ActivityThread.access$700(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=-1, data=Intent { act=inline-data dat=file:///storage/sdcard0/SmartConsultant/20140217194718.jpg typ=image/jpeg (has extras) }} to activity {com.smarthumanoid.com/com.netdoers.com.ui.AddSxActivity}: java.lang.NullPointerException
at android.app.ActivityThread.deliverResults(ActivityThread.java:3488)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2883)
... 13 more
Caused by: java.lang.NullPointerException
at com.netdoers.com.ui.AddSxActivity.onActivityResult(AddSxActivity.java:485)
at android.app.Activity.dispatchActivityResult(Activity.java:5371)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3484)
... 14 more
答案 0 :(得分:1)
相机意图
try {
Log.d("Main Activity", "Camera");
String fileName = "temp.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
mImageCaptureUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,mImageCaptureUri);
startActivityForResult(intent, 2);
} catch (Exception e) {
// TODO Auto-generated catch block
}
<强> onActivityResult 强>
protected void onActivityResult(final int requestCode,final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("Main Activity", "On Activity Result");
try {
Uri selectedImage=null;
if(requestCode == 2 && resultCode == RESULT_OK )
{
/* Log.d("Main Activity", "Camera");
File fi = new File("/sdcard/tmp");
try {
selectedImage = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), fi.getAbsolutePath(), null, null));
if (!fi.delete()) {
Log.i("logMarker", "Failed to delete " + fi);
}
} catch (Exception e) {
e.printStackTrace();
}*/
selectedImage=mImageCaptureUri;
/* mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
"tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
selectedImage=mImageCaptureUri;*/
}
if(selectedImage==null)
{
Log.d("Main Activity","Back");
return;
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("Main Activity","Exception");
return;
}
return;
}
selectedImage 是Uri的捕获图像,它在Sony手机中运行良好。
答案 1 :(得分:0)
此处,您未在tempFile
中提供任何图像名称,因此可以使用SDCard中的该名称保存拍摄的图像。
现在,比如说,图片名称将为123.jpg
....替换此
File tempFile = new File(Environment.getExternalStorageDirectory().getPath()+"/ABC";);
...与
File tempFile = new File(Environment.getExternalStorageDirectory().getPath()+"/ABC/123.jpg");