2

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

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);
     }

}

当我拍照并按“勾选”确定按钮时。它不会向我的应用程序发送任何结果。

我在 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

4 回答 4

1

仅供参考(我碰巧现在正在打开它们),这里有一些相关的 SO:

他们大多发现原因是保存图像文件时出现问题,或者onActivityResult.

于 2014-01-21T21:47:28.093 回答
0

这可能对人们有所帮助,因为我几天来一直在努力解决这个问题。

我正在开发一个继承的项目,将 Cordova 与最新的 Phonegap 条形码扫描仪(现在由 wildabeast 在 GitHub 上维护)一起使用,并且在修复了一些 Cordova 版本问题,将项目从 Cordova 版本 2 升级到 3.1.0 之后,我仍然拥有使用条形码扫描仪后应用程序无法返回的问题。

使用 window.onunload 事件,我发现应用程序实际上是在条码扫描器插件启动之前卸载的。事实证明这是设计使然,并且是由开发人员选项引起的,称为“不保留活动”。禁用此选项以“保持活动”运行您的应用程序,并且它不会关闭。

我不确定哪些手机启用了此选项(此处为三星 Note II,使用 Android 4.1.2)以及是否或如何绕过它,我不确定如何在不依赖的地方开发我的应用程序在这个选项上。实施 Scandit 扫描仪插件并没有解决问题,它只是稍微改善了问题,但它仍然是一个命中注定的问题。现在我坚持使用 Phonegap 插件。

希望这可以帮助别人!

于 2013-10-08T08:45:10.130 回答
0

您的代码的问题是您正在创建一个无效的文件名。

String name=  "pic"+new Date().getTime();

创建一个名称中包含名称的文件,:这使其无效,并且相机无法存储图像以返回给您。

于 2012-07-28T20:09:22.207 回答
-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);

    }
 }
于 2012-07-23T04:50:17.253 回答