使用 CameraPreview 时获取 GPS 数据的问题

2024-02-21

我尝试编写一些 AR 应用程序。现在,我编写了一些代码来显示相机预览并从设备上的传感器(加速计、指南针、GPS 接收器)获取数据。

当我在单独的应用程序中运行代码时(例如相机预览作为一个应用程序和作为第二个应用程序获取 GPS 数据的应用程序),一切正常。但是当我尝试集成这两个模块时 - GPS 停止工作;看起来监听器没有收到任何数据。您是否也遇到过类似的问题?

代码如下所示:

public void onResume()
{
    super.onResume();

    mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                                            1000, 0.0f, 
                                            mLocationListener);
}


public void onPause()
{
    super.onPause();
    mLocationManager.removeUpdates(mLocationListener);
}


private LocationListener mLocationListener = new LocationListener()
{

    public void onLocationChanged(Location pLocation) {
        double lLatitude = pLocation.getLatitude();
        double lLongitude = pLocation.getLongitude();
        mGpsTextView.setText ("Longitude" + Double.toString(lLongitude) + " Latitude: " + Double.toString(lLatitude));
    }

    public void onProviderDisabled(String pProvider) {
        mGpsTextView.setText ("Provider disabled");
    }

    public void onProviderEnabled(String pProvider) {
        mGpsTextView.setText ("Provider enabled");
    }

    public void onStatusChanged(String pProvider, int pStatus, Bundle pExtras) {
        switch (pStatus)
        {
         case LocationProvider.OUT_OF_SERVICE:
             mGpsTextView.setText("GPS out of service");
             break;
         case LocationProvider.TEMPORARILY_UNAVAILABLE:
             mGpsTextView.setText("GPS temorarily unawalible");
             break;
         case LocationProvider.AVAILABLE:
             mGpsTextView.setText("GPS avalible");
             break;
         default:
             mGpsTextView.setText("EEE");
        }

   }

};

我尝试在 onCreate/onPause 中注册/取消注册侦听器,但行为是相同的。

相机预览代码如下所示:

私有 SurfaceHolder.Callback mSurfaceHolderCallback = new SurfaceHolder.Callback() { 私人相机mCamera;

    public void surfaceCreated (SurfaceHolder pSurfaceHolder)
    {
        stopAndReleaseCamera();
        mCamera = Camera.open();
        try {
            mCamera.setPreviewDisplay(pSurfaceHolder);
        }
        catch (Exception imLazy) {
            stopAndReleaseCamera();
            imLazy.printStackTrace();
        }
    }

    public void surfaceChanged (SurfaceHolder pSurfaceHolder, int pFormat, int pWidth, int pHeight)
    {
        Parameters lCameraParams = mCamera.getParameters();
        lCameraParams.setPreviewSize (pWidth, pHeight);
        mCamera.setParameters (lCameraParams);
        mCamera.startPreview();
    }

    public void surfaceDestroyed (SurfaceHolder pSurfaceHolder)
    {
        stopAndReleaseCamera();
    }

    private void stopAndReleaseCamera()
    {
        if (mCamera != null)
        {
            try
            {
                mCamera.stopPreview();
                mCamera.release();
            }
            catch (Exception imLazy)
            {
                //ignore
                imLazy.printStackTrace();
            }
            mCamera = null;
        }
    }
};

这是在 onCreate 中注册的:

    SurfaceView lSurfaceView = (SurfaceView)findViewById(R.id.CameraSurface);
    lSurfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    lSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
    lSurfaceView.getHolder().addCallback (mSurfaceHolderCallback);

R.id.CameraSurface 在layout.xml 中定义为

SurfaceView android:id="@+id/CameraSurface"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"

任何想法有什么问题吗?

该代码在三部不同的手机上进行了测试


如果您需要稳定且连续的位置更新流,则必须确保 LocationListener 未释放。当侦听器死亡时,系统 LocationManager 会(通过远程接口)检测到它,如果没有其他 LocationListener 正在侦听,则系统 LocationManager 将停止!结果是 GPS 必须获得新的定位。正如亨利所说:服务就能解决问题。

如果您有实体手机,您可以通过运行 GPS 代码并旋转手机来检查行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CameraPreview 时获取 GPS 数据的问题 的相关文章

随机推荐

  • 函数内的时间戳比较

    为了防止旧版本覆盖新版本 在这个简单的函数中 create function myupdate paramts timestamp without time zone language plpgsql AS begin step 1 com
  • Swift如何改变backIndicatorImage的tintColor

    我在 AppDelegate 中得到了这段代码 U INavigationBar appearance backIndicatorImage imageLiteral resourceName backarrow 即使图像的颜色是白色 它也
  • 类型错误:(0,_mockingooose.default)不是函数_mockingooose

    我正在尝试使用以下代码来模拟我的猫鼬模式 report schema js import mongoose Schema from mongoose const reportSchema new Schema data type strin
  • Patchwork 无法识别具有 ggMargnial 分布元素的图

    尝试显示 2 个图gg边际但这些情节并未得到认可 我将代码的简化版本粘贴到下面的位置 Before添加 ggMarginal 元素 Patchwork 按预期并排显示 ggplots After使用 ggMarginal 添加边际分布 Pa
  • 在 Git 中跨分支共享文件

    我的项目中有很多文件有时会被修改 但总是在许多不同的分支之间共享 示例包括构建脚本 包含路径的批处理文件等 甚至 gitignore 文件本身也是一个示例 我希望这些东西在源代码管理中 但我不希望各个分支跟踪它们的更改 你如何处理这种情况
  • Android Studio + Spek 集成

    我正在尝试将 Spek 测试框架添加到我的 Android Studio 项目中 按照说明进行操作Here http spekframework org docs latest 我最终将以下内容添加到我的模块中build gradle te
  • Qt 托盘图标拖放

    有谁知道是否可以使用 Qt 对托盘图标进行拖放操作 我一直在做一些研究 这是我得出的结论 QSystemTrayIcon 无法显式处理拖 放事件 不过 有一种基于 Spifftastic 托盘图标定位方法的解决方法 您创建一个独特的彩色图标
  • 带有 Ionic 3 的 Google Maps Native cordova 插件仅显示灰色框

    我试图显示地图 但我得到的只是一个底部带有谷歌徽标的灰色框 我查看了该网站上的其他帖子 并尝试了所有这些帖子 但似乎都没有解决该问题 我正在使用 ionic 3 12 0 和 cordova 插件 googlemaps 2 0 7 我已确保
  • 输出 iso8601 中的 Ruby 持续时间

    我希望在 ruby on Rails 中为 schema org 以 iso8601 格式输出持续时间 我已经知道如何输出 iso8601 中的时间戳 例如video created at iso8601 我现在想做的是输出以下格式的内容
  • 帕斯卡三角形

    我正在使用 python 脚本寻找帕斯卡三角形 我已经完成到这里了 不知道如何添加 numstr raw input please enter the height height int tri row1 1 row2 1 1 tri ap
  • 使用 Lodash/Javascript 过滤嵌套数组

    我有以下对象数组 var sizeList id 1 title Test1 type name Big present false name Small present true name Medium present false id
  • Android 图像按钮工具提示

    我正在尝试构建一个带有图像按钮的应用程序 其工作方式类似于操作栏 但我无法让它们在长按时显示工具提示
  • 修复配置错误的镜像 zfs 池

    我的机器从两个 USB 设备的镜像 zfs 池启动 以前的泳池是这样的 sudo zpool status pool freenas boot state ONLINE scan resilvered 891M in 15h19m with
  • 使用模板函数的不同类型的输入

    我尝试使用模板函数从用户那里获取输入 我希望能够输入 int double float 和 strings 这是我到目前为止的代码 template
  • 知道在Windows机器上杀死哪个java.exe进程[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 当基于 java 的应用程序在 Windows 计算机上开始出现异常时 如果您无法正常退出该应用程序 您希望能够在任务管理器中终止该进程 大多数时候
  • ASP.NET MVC:如何添加视图、脚本和内容文件作为链接以便跨项目共享? (通过VS中的“添加为链接”)

    我有一个想要共享的通用 Layout cshtml 文件 当我将文件添加为项目中的链接 通过 添加现有项目 gt 添加为链接 时 我收到一条错误 指出在运行应用程序时找不到该文件 如果我将构建操作设置为 始终复制 它会将文件复制到构建目录
  • 将 /socket.io/socket.io.js 缩小为 1.0

    今天socket io 1 0已经发布了 我刚刚更新 现在以下内容不再起作用 io enable browser client minification io enable browser client etag io enable bro
  • selenium.common.exceptions.ElementNotVisibleException:消息:尝试使用 Python + Selenium 访问元素时元素不可见

    我尝试在以下网站中输入用户名和密码 https www thegreatcoursesplus com sign in https www thegreatcoursesplus com sign in driver webdriver C
  • SQL Server 错误 916

    当我尝试附加数据库时出现此错误 错误信息 发生异常 执行transact sql语句时 或批次 我已将数据库复制到 SQL Server 服务器的 Data 文件夹中 我想在 SQL Server 中配置数据库 但是当我尝试附加数据库时 出
  • 使用 CameraPreview 时获取 GPS 数据的问题

    我尝试编写一些 AR 应用程序 现在 我编写了一些代码来显示相机预览并从设备上的传感器 加速计 指南针 GPS 接收器 获取数据 当我在单独的应用程序中运行代码时 例如相机预览作为一个应用程序和作为第二个应用程序获取 GPS 数据的应用程序