我创建了一个应用程序,可以向相机应用程序发送意图以拍照。
if (storageState.equals(Environment.MEDIA_MOUNTED)) {
try {
String name= "pic"+new Date().getTime();
File photoFile = File.createTempFile(name, ".jpg");
Log.i(TAG, "created file:"+name+".jpg");
mImageUri = Uri.fromFile(photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(takePictureIntent, ActionCode.TAKE_PHOTO);
} catch (IOException e) {
Log.e(TAG, "Could not create file. ", e);
}
}
当我拍照并按“勾”OK按钮时。它不会向我的应用程序发送任何结果。
我在logcat中发现了这个错误。
07-22 17:56:30.289: E/iu.UploadsManager(5699): upload failed for ID=11 content_uri=content://media/external/images/media/5117 state=1 bytes_total=0,0%
07-22 17:56:30.289: E/iu.UploadsManager(5699): java.lang.IllegalArgumentException: Zero length file can't be uploaded
07-22 17:56:30.289: E/iu.UploadsManager(5699): at com.google.android.apps.plus.iu.GDataUploader.upload(GDataUploader.java:95)
07-22 17:56:30.289: E/iu.UploadsManager(5699): at com.google.android.apps.plus.iu.UploadsManager.doUpload(UploadsManager.java:819)
07-22 17:56:30.289: E/iu.UploadsManager(5699): at com.google.android.apps.plus.iu.UploadsManager.access$1200(UploadsManager.java:54)
07-22 17:56:30.289: E/iu.UploadsManager(5699): at com.google.android.apps.plus.iu.UploadsManager$UploadTask.performSyncInternal(UploadsManager.java:1390)
07-22 17:56:30.289: E/iu.UploadsManager(5699): at com.google.android.apps.plus.iu.UploadsManager$AutoUploadTask.performSyncInternal(UploadsManager.java:1874)
07-22 17:56:30.289: E/iu.UploadsManager(5699): at com.google.android.apps.plus.iu.UploadsManager$UploadTask.performSync(UploadsManager.java:1309)
07-22 17:56:30.289: E/iu.UploadsManager(5699): at com.google.android.apps.plus.iu.InstantUploadSyncManager.performSyncInternal(InstantUploadSyncManager.java:545)
07-22 17:56:30.289: E/iu.UploadsManager(5699): at com.google.android.apps.plus.iu.InstantUploadSyncManager.performSync(InstantUploadSyncManager.java:591)
07-22 17:56:30.289: E/iu.UploadsManager(5699): at com.google.android.apps.plus.iu.InstantUploadSyncService$InstantUploadSyncAdapter.onPerformSync(InstantUploadSyncService.java:180)
07-22 17:56:30.289: E/iu.UploadsManager(5699): at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:254)
答案 0 :(得分:1)
仅供参考(我恰好让它们现在打开),这里有一些相关的SO:
他们大多发现保存图像文件的问题或onActivityResult
中的错误。
答案 1 :(得分:0)
您的代码存在问题,即您正在创建无效的文件名。
String name= "pic"+new Date().getTime();
创建一个名称中包含:
的文件,使其无效,相机无法存储图像以便返回给您。
答案 2 :(得分:0)
这可能对人们有所帮助,因为我几天都在努力解决这个问题。
我正在开发一个继承项目,使用Cordova和最新的Phonegap条形码扫描器(现在由GitHub上的wildabeast维护),在修复了一些Cordova版本问题后,将项目从Cordova版本2带到3.1.0,我仍然在使用条形码扫描仪后仍然存在应用程序无法返回的问题。
使用window.onunload事件,我发现应用程序在条形码扫描程序插件启动之前实际卸载了。结果是按设计,并且是由开发人员选项引起的,该选项称为“不要保持活动”。禁用此选项以“保持运行应用程序的活动”,并且它不会关闭。
我不确定这个选项是打开哪个手机(三星Note II,这里有Android 4.1.2)以及是否或如何绕过它,我不知道如何开发我的应用程序不依赖于此选项。实现Scandit扫描程序插件并没有解决问题,它只是稍微改善了问题,但它仍然是一个打击和错过。现在我坚持使用Phonegap插件。
希望这可以帮助别人!
答案 3 :(得分:-1)
参考下面的代码
path = Environment.getExternalStorageDirectory() + "/"
+ filename;
btnTakePhoto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
}
});
然后
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == TAKE_PICTURE) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 3;
bitmap = BitmapFactory.decodeFile(path, options);
// Fetch the image from give path.
imageView.setImageBitmap(bitmap);
}
}