Android相机不会返回原始活动

时间:2012-07-23 01:00:41

标签: android android-intent camera

我创建了一个应用程序,可以向相机应用程序发送意图以拍照。

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)

4 个答案:

答案 0 :(得分:1)

答案 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);

    }
 }