【问题标题】:Android Camera does not return to original activityAndroid 相机无法恢复原始活动
【发布时间】:2012-07-23 01:00:40
【问题描述】:

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

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)

【问题讨论】:

标签: android android-intent camera


【解决方案1】:
【解决方案2】:

您的代码的问题是您创建的文件名无效。

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

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

【讨论】:

    【解决方案3】:

    这可能会对人们有所帮助,因为我已经努力解决这个问题好几天了。

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

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

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

    希望这可以帮助其他人!

    【讨论】:

      【解决方案4】:

      参考以下代码

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多