【问题标题】:Google glass GDK - Error opening cameraGoogle Glass GDK - 打开相机时出错
【发布时间】:2013-11-25 13:37:00
【问题描述】:

我正在使用 GDK 为 Glass 开发应用,但在启动相机意图时遇到问题

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, RESULT_FROM_CAMERA);

错误是:

11-24 19:21:30.925: E/StrictMode(591): class com.google.glass.camera.ApiTakePictureActivity; instances=2; limit=1
11-24 19:21:30.925: E/StrictMode(591): android.os.StrictMode$InstanceCountViolation: class com.google.glass.camera.ApiTakePictureActivity; instances=2; limit=1
11-24 19:21:30.925: E/StrictMode(591):  at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1)

有什么建议吗?

【问题讨论】:

  • 我刚开始相机开发,遇到了同样的问题。你解决了吗?
  • 没有。我仍然有问题。正在拍摄并保存照片,但应用程序崩溃并且未调用 onActivityResult。尝试在启动意图时将“输出”额外与照片文件所需位置的值一起使用,并在创建意图之前使用 FileObserver,忽略 onActivityResult
  • 在我的情况下它没有崩溃但我无法访问该文件,同样检查了 adb 上的文件并且它存在。我将尝试按照您的建议指定文件名。谢谢!
  • 太奇怪了,我正在尝试指定 EXTRA_OUTPUT 参数,但似乎也不起作用。该文件从未创建,参数似乎被忽略:filename = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/temp.jpg"; Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, 文件名);
  • 更改了 Uri 的文件名,但没有。太奇怪了,这么简单的东西都行不通

标签: android google-glass google-gdk


【解决方案1】:

我认为您在创建 Intent 时需要使用 android.provider.MediaStore 中的常量:

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, RESULT_FROM_CAMERA);

【讨论】:

  • 谢谢,但我认为它不会改变任何东西,因为该常量的值是“android.media.action.IMAGE_CAPTURE”
  • 你是在声明一个android.hardware.Camera类型的对象并调用camera.open()吗?如果是这样,请取消这些电话。我能够通过简单地包含这些来重现上面的错误。我的代码没有它们也能工作。
  • 不,我没有声明任何相机对象,我只是使用上面两行:S
【解决方案2】:

我终于解决了这个问题。异常仍然显示,但它工作完美。使用额外的“输出”不起作用,因为相机意图不使用它。 OnActivityResult 也不起作用,因为它没有被调用...... 我所做的是忽略 onActivityResult 并使用 FileObserver 指向 Camera 文件夹并在创建新文件时等待事件。

final File photoFolder=new File(Environment.getExternalStorageDirectory() + File.separator + "DCIM/Camera");
fileObserver = new FileObserver(photoFolder.getAbsolutePath(), FileObserver.CREATE) 
        {
            @Override
            public void onEvent(int event, final String path) 
            {
                if(event == FileObserver.CREATE)
                {
                    fileObserver.stopWatching();
                    // Do whatever
                }
            }
        };
        fileObserver.startWatching();

【讨论】:

    【解决方案3】:

    您似乎打开了多个实例

    instances=2; limit=1
    

    【讨论】:

    • 我只有一个地方可以启动相机意图:S
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多