在 android appwidget 中实现位置侦听器时出现问题

2023-12-10

我正在开发一个小部件,它将获取当前 GPS 位置并将该值传递到远程 PHP 页面以获取信息并将其显示在小部件中。这就是我正在努力做的事情。

我在为 appWidget 实现位置侦听器时遇到问题。它没有随当前位置更新,而是显示初始小部件,即“正在加载小部件”(这里我放置此文本)

我们可以为AppWidgetProvider实现Location Listener吗?
Or
您能否建议我在 App Widget 中获取 GPS 位置的可能解决方案?

我将所有必要的权限放在清单文件中。
这是我的代码片段:

public class test extends AppWidgetProvider {
static LocationManager locMan;
static Location curLocation;
static Boolean locationChanged;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
    // To prevent any ANR timeouts, we perform the update in a service
    context.startService(new Intent(context, UpdateService.class));
}

public static class UpdateService extends Service {
    // GPS Listener Class
    LocationListener gpsListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            // Log.w("GPS", "Started");
            if (curLocation == null) {
                curLocation = location;
                locationChanged = true;
            }

            if (curLocation.getLatitude() == location.getLatitude() && curLocation.getLongitude() == location.getLongitude())
                locationChanged = false;
            else
                locationChanged = true;

            curLocation = location;

            if (locationChanged) 
                locMan.removeUpdates(gpsListener);

        }

        public void onProviderDisabled(String provider) {

        }

        public void onProviderEnabled(String provider) {
            // Log.w("GPS", "Location changed", null);
        }

        public void onStatusChanged(String provider, int status,
                Bundle extras) {
            if (status == 0)// UnAvailable
            {

            } else if (status == 1)// Trying to Connect
            {

            } else if (status == 2) {// Available

            }
        }

    };

    // In service start method, I am registering for GPS Updates
    @Override
    public void onStart(Intent intent, int startId) {

        locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        if (locMan.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER,20000, 1, gpsListener);
        } else {
            this.startActivity(new Intent("android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS"));
        }

        if (curLocation != null) {
            double lat = curLocation.getLatitude();
            double lng = curLocation.getLongitude();
            Toast.makeText(getBaseContext(),"Lat : " + String.valueOf(lat) + "\n Long : "+ String.valueOf(lng), Toast.LENGTH_LONG).show();

        }
        // Build the widget update for today
        RemoteViews updateViews = buildUpdate(this);

        // Push update for this widget to the home screen
        ComponentName thisWidget = new ComponentName(this,InKakinadaWidget.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(this);
        manager.updateAppWidget(thisWidget, updateViews);

    }

    public RemoteViews buildUpdate(Context context) {
        // Here I am updating the remoteview
        return updateViews;
    }

    @Override
    public IBinder onBind(Intent intent) {
        // We don't need to bind to this service
        return null;
    }

}
}

我看到的问题是您在调用 requestLocationUpdates() 之后立即尝试在 onStart() 中检查 curLocation。 LocationManager.requestLocationUpdates() 是异步的,这意味着您的 LocationListener 在 onStart() 返回之前不会被回调。让您的 LocationListener 在收到位置后更新 UI,不要尝试在 onStart 中执行此操作。

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

在 android appwidget 中实现位置侦听器时出现问题 的相关文章

随机推荐

  • 如何在 Eigen 中计算张量的外积?

    在特征中 我们可以使用以下方法轻松地进行张量收缩 Tensor
  • 是否有 XSLT 名称元素?

    在 XSLT 中有
  • 无服务器框架 TypeError:e 不是函数

    我在用着serverless framework在 AWS 中安排任务 我的应用程序结构是 src tasks analytics task js tasks js serverless yml 的内容analytics task js m
  • 辅助线程调用主线程的函数

    我正在 PyQt 中制作一个 GUI 供用户创建大量数据的备份 GUI 主线程 正在接受用户的输入 rsync 命令 用于备份 也在主线程中被调用 因此窗口被冻结 目的是尝试 qthread 以便应用程序运行而不会冻结 我的搜索材料 1 h
  • iOS可达性测试

    对于我们的应用程序 每当应用程序用户尝试发布消息时 我们都会使用以下代码来检查互联网连接 当我们测试该功能时 打开飞行模式时它工作正常 那么当我们关闭飞行模式时 对connected的调用仍然返回NO 原因可能是什么 我们是否需要在订单中进
  • 匀称的交叉点与匀称的关系——不精确?

    我想知道我是否以错误的方式思考或者这是否是一个错误 我有一个线串和一个多边形 我创建直线和多边形边界的交点 这些交点应该与多边形的边界相交 至少接触 对吧 from shapely import geometry wkt line geom
  • 什么时候适合使用AJAX?

    什么时候适合使用AJAX 使用 AJAX 的优点和缺点是什么 回答我的最后一个问题 有些人似乎非常坚定地认为我应该只在情况合适的情况下使用 AJAX 我应该将 AJAX 逻辑添加到我的 PHP 类 脚本中吗 回应查德 伯奇的回答 是的 我指
  • 如何在android中的ExpandableListView的getChildView中识别按钮点击

    我正在我的 Android 应用程序中构建 ExpandableListView 我已经制作了重复特定数字的子 xml 布局 我的 xml 布局中有一个删除按钮 其 id 在 xml 中设置为 btnDelete 通过单击删除按钮 我想删除
  • 查找 GitHub Pages 上托管的网站的浏览量 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我已经使用 GitHub Pages 为自己建立了一个网站 但可以知道有多少访问者吗 我知道我的存储库中有流量选项卡 这是否也显示我的网站以及存储库本身的浏览量 如果不是我该怎么办
  • 处理 Altair 分区统计图中的缺失值/空值

    我使用美国州级数据在 Altair 中创建了一张分区统计图 但是 我没有某些州的数据 默认情况下 这些州根本不会出现在地图上 这是一个示例图像 我希望零状态在地图上显示为灰色 Altair 文档显示了另一张符合此描述的地图 我的问题是如何使
  • Android Studio:407 需要代理身份验证

    我已经安装了Android Studio 预览版本 因为稳定的 IDE 版本不支持我的应用程序中使用的 JetPack 但我在同步项目时遇到代理问题 错误 无法获取 https dl google com dl android maven2
  • 如何以编程方式在 iPhone 应用程序中打开 LinkedIn 公司网址?

    我想通过以编程方式打开 LinkedIn 公司网址从我的 iPhone 应用程序到 LinkedIn 应用程序 我正在使用以下代码 但无法正常工作 请帮助我 string NSString stringWithFormat linkedin
  • Python - 从 SQLite3 DB 读取 BLOB 类型

    这是以下内容的后续 Python 将十六进制转换为 INT CHAR 我现在有了一个可行的解决方案 可以将存储的 IP 十六进制值从 sqlite3 数据库转换为可读且可用的格式 然而到目前为止 我一直通过直接从 sqlite3 数据库查看
  • 如何在 DataFlow 作业完成时发出通知

    我想在 GAE 上知道数据流作业何时完成 我尝试制作以下两条管道 1 write to bigquery gt gt beam io WriteToBigQuery WriteStringsToPubSub projects fakeprj
  • Xcode 11.5 无法在运行 iOS13.5 的 iPhone 上安装应用程序

    我正在开发的一个应用程序在我的 iPhone 上运行良好 然后在更新 iOS 后 该应用程序会构建但不会安装到手机上 但可以在模拟器中运行 弹出一条消息 提示无法安装 应用程序名称 我尝试过的 重新安装 Xcode 删除和添加配置文件 重新
  • tkinter - 更改菜单栏位置

    我有一个程序 就像带有教育游戏的桌面环境 我想知道如何将菜单栏放在窗口底部 提前致谢 如果您正在谈论设置时获得的本机菜单栏 则不能menu根窗口的属性 您可以使用框架和一个或多个菜单按钮创建自己的菜单栏 其行为有点像菜单栏 并将其放置在底部
  • Android:如何将动画图像放置在我们可以显示和隐藏的 EditText 中

    我正在尝试添加一个动画微调器inside右侧的 EditText 视图 并以编程方式显示 隐藏它 我通过引入线性插值旋转创建了动画微调器 res anim rotate forever xml
  • javascript 使用 settimeout() 和循环

    我有一个包含 8x10 个单元格的表格 每个销售都有一个具有自己 id 的输入元素 11 12 21 22 23 现在我想在 假设 0 5 秒 之后填充这些输入 我刚刚输入一些值进行测试 Betrag new Array Betrag 0
  • 在 Swarm 重新启动之前,NodeJS 不会检测到 Docker Bind Mount 中的更改

    我正在 Docker 上以 Swarm 模式 单节点 构建 NodeJS 应用程序 我正在为 NodeJS 源代码使用绑定安装卷 一切运行完美 我可以在 localhost 中看到 NodeJS 和 Express 的输出 但是当我更改 N
  • 在 android appwidget 中实现位置侦听器时出现问题

    我正在开发一个小部件 它将获取当前 GPS 位置并将该值传递到远程 PHP 页面以获取信息并将其显示在小部件中 这就是我正在努力做的事情 我在为 appWidget 实现位置侦听器时遇到问题 它没有随当前位置更新 而是显示初始小部件 即 正