首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Flutter应用程序中作为后台任务在辅助隔离中获取地理位置

在Flutter应用程序中作为后台任务在辅助隔离中获取地理位置
EN

Stack Overflow用户
提问于 2019-04-20 20:52:10
回答 1查看 1.6K关注 0票数 3

我想要在后台获取设备的GeoLocation,即使应用程序已终止。作为一种方法,Flutter提供了隔离,以及AlarmManager。

我的最终目标,再一次是,即使应用程序已经终止,也要获得设备的GeoLocation。

我已经通过了https://medium.com/flutter-io/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124,但并不完全理解它,因为我是一个Flutter新手。如果这是唯一的方法,请帮助我理解它。

我正在使用插件:- https://pub.dartlang.org/packages/geolocator https://pub.dartlang.org/packages/flutter_isolate

问题来了,正如我所看到的,当地理定位器在内部检查GoogleApiAvailability插件后,使用辅助隔离中的'Channel.invokeMethod‘来尝试获取位置。它抛出的错误是:-

代码语言:javascript
运行
AI代码解释
复制
[  +81 ms] E/GooglePlayServicesUtil(11608): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
[        ] E/MethodChannel#flutter.baseflow.com/google_api_availability/methods(11608): Failed to handle method call
[        ] E/MethodChannel#flutter.baseflow.com/google_api_availability/methods(11608): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
[        ] E/MethodChannel#flutter.baseflow.com/google_api_availability/methods(11608):     at com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable(Unknown Source:12)
[        ] E/MethodChannel#flutter.baseflow.com/google_api_availability/methods(11608):     at com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable(Unknown Source:5)
[        ] E/MethodChannel#flutter.baseflow.com/google_api_availability/methods(11608):     at com.google.android.gms.common.GoogleApiAvailability.isGooglePlayServicesAvailable(Unknown Source:94)

请看一下:- https://github.com/BaseflowIT/flutter-geolocator/blob/b869f3221c890c2ae87b22d0384577fd902d38ca/lib/geolocator.dart#L75

在以下位置调用GoogleApiAvailability :- https://github.com/BaseflowIT/flutter-google-api-availability/blob/96ffe46a7cf8d81bfa107ca83ce2aaf8a5ff4847/lib/src/google_api_availability.dart#L23

这是在辅助隔离上崩溃的线。

地理定位插件有一个额外的配置,我可以强制LocationManager加入。它不会崩溃,但一旦应用程序终止,它就会挂起。以下是在地理定位器插件中强制执行的方式:- https://github.com/BaseflowIT/flutter-geolocator/blob/b869f3221c890c2ae87b22d0384577fd902d38ca/lib/geolocator.dart#L64

可以在调用getLocation方法之前设置此标志。

如果这不起作用,我需要帮助来实现我的目标。

理想情况下,它应该给我一个二级隔离的位置。我需要了解相同配置所需的正确配置。

EN

回答 1

Stack Overflow用户

发布于 2019-05-16 15:42:39

GoogleApiAvailability插件使用当前活动来检查API是否可用,请查看此处:https://github.com/BaseflowIT/flutter-google-api-availability/blob/96ffe46a7cf8d81bfa107ca83ce2aaf8a5ff4847/android/src/main/java/com/baseflow/googleapiavailability/GoogleApiAvailabilityPlugin.java#L50

我认为这是错误的,因为isGooglePlayServicesAvailable()方法需要上下文,而不是活动(参见:https://developers.google.com/android/reference/com/google/android/gms/common/GoogleApiAvailability)。

这里请求接口只需要Activity:https://github.com/BaseflowIT/flutter-google-api-availability/blob/96ffe46a7cf8d81bfa107ca83ce2aaf8a5ff4847/android/src/main/java/com/baseflow/googleapiavailability/GoogleApiAvailabilityPlugin.java#L67

这对于隔离(或服务)不起作用,因此如果activity不可用,插件将使用Application context。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55777639

复制
相关文章
Discourse 修改上传附件的大小
官方的帖子在:Change the maximum attachment/upload size - sysadmin - Discourse Meta 页面中。
HoneyMoose
2023/06/14
2970
Discourse 修改上传附件的大小
织梦dede修改附件图片储存路径
在用织梦建站时,在运营网站一段时间后,会发现织梦默认的图片上传路径有问题,织梦默认保存图片附件是按照日期来建目录,路径为uploads/allimg/171008/ ,网站每天都上传图片,时间长了uploads/allimg就有太多的目录了
用户8851537
2021/07/20
3.3K0
Emlog文章列表获取附件(图片)数量方法
本方法实际获取的是文章附件的数量,而非只是图片的数量,如果你的文章含有文件附件,列表也会显示成图片数量。所以此方法最适合于文章图片特别多而且没有附件的博客。Emlog文章列表获取附件(图片)数量,方法过于简单,修改博客emlog模板文件步骤如下:
用户8099761
2023/05/10
4330
NetCMS修改之二:单击新闻附件,直接打开文件「建议收藏」
NetCMS系统的新闻附件,是通过down.aspx页面实现下载附件的。这样做的好处可能是可以隐藏附件的真实地址,但给用户使用会带来一个小麻烦:无法使用右键单击来实现将下载的文件另存为。
全栈程序员站长
2022/11/11
3660
abstract修改方法
抽象的方法是要让子类继承下去再定义它的。让抽象的概念得以设计。比如当一种面向对象设计遇到一种方法有多种设计的时候,能够在基类暂且不设计他,把设计的工作交给子类去完毕,但子类设计时。要么继续继承他超类的抽象概念,要么就把抽象的方法定义出来。
全栈程序员站长
2022/07/18
2540
Typecho上传附件失败最佳解决方法
2.继续下面的工作:找到usr/uploads这个文件夹,修改777权限,linux和Windows系统修改的方法不同,但网上都有很多介绍:Windows下网站目录777可读写权限设置方法 然后重启服务器,上传附件成功。
白衣少年
2022/12/26
1.3K0
Typecho上传附件失败最佳解决方法
爬虫课堂(十四)|URL的去重方法
所谓的URL去重,就是爬虫将重复抓取的URL去除,避免多次抓取同一网页。爬虫一般会将待抓取的URL放在一个队列中,从抓取后的网页中提取到新的URL,在他们被放入队列之前,首先要确定这些新的URL没有被
黄小怪
2018/05/21
2.1K0
梁老师小课堂|谈谈模板方法模式
众多设计模式中,我觉得模板方法模式是很好理解,也很值得深入研究的技巧。定义如下,在一个包含多个步骤的业务框架中,大部分步骤是固定不变,并且适用于多种业务场景,可变的步骤则留给子类独立实现,从而分离了稳定和变化。
公众号_松华说
2020/11/17
3900
梁老师小课堂|谈谈模板方法模式
远程字体修改方法
注释: 其中font-family: ‘xxx’; 中的 xxx 字体名称(可随意命名,需要与使用时的名字保持一直)
小狐狸说事
2022/11/17
9990
JbuilderX的修改方法
打开JBuilderX/bin/jbuilder.config文件,在 #TunethisVMtoprovideenoughheadroomtoworkonlarge #applications vmparam-Xms32m vmparam-Xmx256m 后面追加一行 vmparam-Dprimetime.editor.useVariableWidthFont=true 此方法方法,在不同的系统和机器上表现的结果可能会不尽相同,大家自己研究吧。 可以把%system%/document.andSettings/you_user 目录下的/.primetimeX和/.jbuilderX目录删掉,然后再启动JBuilderX试试,一般就正常了。这时,可以看到“Tools”—“Perferences”中“Edit”—“Display”的“Fontfamily”选项为“DialogInput”。无论中文显示还光标位置应该都没有问题了,而且即使系统格掉重装,也不会有影响,不需要再重新设置。
逍遥剑客
2019/02/20
4370
JbuilderX的修改方法
打开JBuilderX/bin/jbuilder.config文件,在 #TunethisVMtoprovideenoughheadroomtoworkonlarge #applications vmparam-Xms32m vmparam-Xmx256m 后面追加一行 vmparam-Dprimetime.editor.useVariableWidthFont=true 此方法方法,在不同的系统和机器上表现的结果可能会不尽相同,大家自己研究吧。 可以把%system%/document.andSettin
逍遥剑客
2018/05/21
4820
go上传附件
package main import ( "fmt" "html/template" "io" "log" "net/http" "os" ) //上传方法 func upload(w http.ResponseWriter, r *http.Request) { //这里是get请求 if r.Method == "GET" { t, _ := template.ParseFiles("upload.html") t.Execute(w, nil) } else if r.Method == "POST" { // 服务端调用r.ParseMultipartForm,把上传的文件存储在内存和临时文件中 32 << 20 是一个很大的值:33554432 r.ParseMultipartForm(32 << 20) //这里获取表单的uploadfile file, handler, err := r.FormFile("uploadfile") if err != nil { fmt.Println(err) return } defer file.Close() //这里打开文件buffer f, err := os.OpenFile("./upload/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { fmt.Println(err) return } defer f.Close() //把文件cp到指定目录下。 io.Copy(f, file) fmt.Fprintf(w, "%v", handler.Header) fmt.Fprintf(w, "上传成功") } else { fmt.Println("error") } } func main() { http.HandleFunc("/upload", upload) err := http.ListenAndServe(":8081", nil) if err != nil { log.Fatal("ListenAndServe:", err) } } ------------------------------------------------------------ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>go 上传test</title> </head> <body> <form method="POST" action="/upload" enctype="multipart/form-data" > <input type="file" name="uploadfile" /> <input type="submit" value="上传"> </form> </body> </html>
公众号-利志分享
2022/04/25
1.2K0
小课堂|计算文件Checksum的几种方法
比如,我们到Apache网站上去下载用于操作Excel的依赖包 - Apache POI,就可以看到checksum:SHA-256, SHA-512,如下图所示:
孟君
2021/11/23
1.4K0
小课堂|计算文件Checksum的几种方法
emlog缩略图不同实现方法:正文-附件-随机图片
实现emlog列表也缩略图按先调用正文第一张图片,没有则调用附件图片,如果前两者都没有则调用随机图片代码
用户8099761
2023/05/10
2380
Linux修改主机名修改hostname的方法
Linux主机名即hostname,如何修改?可以临时修改主机名,但是Linux服务器重启后,主机名就失效了。还有一种方式可以永久修改主机名,Linux重启与否依然有效。两种方法都来说一说:
用户1685462
2021/08/27
27.1K1
Ubuntu修改主机名修改hostname的方法
Ubuntu主机名即hostname,如何修改?可以临时修改主机名,但是Linux服务器重启后,主机名就失效了。还有一种方式可以永久修改主机名,Linux重启与否依然有效。两种方法都来说一说:
用户8965210
2021/08/31
7.9K1
Nodejs课堂笔记—第一课:修改Webstorm的默认主题
    最近小半年一直在忙于研究Docker源码,也在写相关的分析文章。但受限于某些条件不能发布到网上,甚为郁闷。而最近几天,接到新的开发任务,需要使用nodejs。之前一直听说过nodejs,但从来没有真正使用过。     因此,在博客中就记录下学习过程,权当课堂笔记了。 OK,第一节课开始了。 正所谓:工欲善其事,必先利其器。因此在google上面搜索一番,发现nodejs开发人员都比较推崇Web-storm这个IDE。并且说这款IDE是"js 开发神器"。站在巨人们的肩膀上,可以少走不少弯路。因此我也
随机来个数
2018/04/16
7790
SAP BOM批量修改方法
BOM批量更改操作步骤分为:选择参考对象-定义选择标准-选择更改类型-定义更改数据-执行更改,查看日志。
用户5495712
2019/05/29
7.9K0
点击加载更多

相似问题

谷歌课堂API -用户ID可以修改吗?

130

谷歌课堂-入门

11

谷歌课堂API

22

谷歌课堂表单

11

谷歌课堂网站整合链接

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文