地理定位在浏览器测试中工作,但在android上不工作

地理定位在浏览器测试中工作,但在android上不工作,android,cordova,typescript,ionic-framework,geolocation,Android,Cordova,Typescript,Ionic Framework,Geolocation,我正在编写一个应用程序,需要在某个点获取您的位置。 我使用了ionic本地地理定位,它被发送到GoogleAPI进行反向地理编码 它的工作原理完全像我刚使用它时所希望的那样。 但当我尝试在android上运行它时,它似乎根本不起作用 如果我运行ionic cordova运行android--device-c-l,我会得到以下控制台日志: [20:23:58]console.log:设备就绪 [20:23:58]console.log:[对象] [20:23:58]console.log:无位置错

我正在编写一个应用程序,需要在某个点获取您的位置。 我使用了ionic本地地理定位,它被发送到GoogleAPI进行反向地理编码

它的工作原理完全像我刚使用它时所希望的那样。 但当我尝试在android上运行它时,它似乎根本不起作用

如果我运行
ionic cordova运行android--device-c-l
,我会得到以下控制台日志:

[20:23:58]console.log:设备就绪
[20:23:58]console.log:[对象]
[20:23:58]console.log:无位置错误

这是该页面上的代码片段

构造函数(公共navCtrl:NavController、公共navParams:navParams、私有地理位置:地理位置、私有平台:平台、公共地理代码提供者:地理代码提供者){
this.platform.ready()。然后(()=>{
控制台日志(“设备就绪”);
this.geo.getCurrentPosition(this.options)。然后(resp=>{
控制台日志(分别为坐标纬度);
控制台日志(分别为坐标经度);
this.getCountry(分别为坐标纬度和坐标经度);
}).catch((错误)=>{
console.log(错误)
});
});
}
getCountry(横向、纵向){
this.geocodeProvider.getCountry(lat,long).subscribe(结果=>this.country=this.getName(结果));
}
getName(JSON:IRootObject){
var location=JSON.results[0]。地址\组件[0]。长\名称;
返回JSON.results[0]。地址\组件[0]。长\名称;

}
我认为您使用的是Android 6或更高版本。在那里,您必须在运行时请求权限

安装:

$ ionic cordova plugin add cordova-plugin-android-permissions
$ npm install --save @ionic-native/android-permissions
使用:

您必须为每个需要的权限执行此请求

有关详细信息,请参阅

在谷歌的指南中,你可以找到更多关于如何申请权限和处理用户响应的信息(解释为什么你需要权限,不要要求太多,…)


@fastr.de我添加了以下内容:


构造函数(公共navCtrl:NavController、公共navParams:navParams、私有地理位置:地理位置、私有平台:平台、公共地理代码提供者:地理代码提供者、私有androidPermissions:androidPermissions){
this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.ACCESS\u FINE\u位置)。然后(
result=>console.log('Has permission?ACCESS\u FINE\u LOCATION',result.haspmission),
err=>this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.ACCESS\u FINE\u位置)
);  
this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.ACCESS\u LOCATION\u EXTRA\u命令),然后(
result=>console.log('Has permission?ACCESS\u LOCATION\u EXTRA\u COMMANDS',result.haspmission),
err=>this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.ACCESS\u LOCATION\u EXTRA\u命令)
); 
this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.ACCESS\u位置)。然后(
result=>console.log('Has permission?ACCESS\u\u LOCATION',result.hasPermission),
err=>this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.ACCESS\u位置)
); 
this.platform.ready()。然后(()=>{
控制台日志(“设备就绪”);
this.androidPermissions.requestPermissions([this.androidPermissions.PERMISSION.ACCESS\u粗略位置,this.androidPermissions.PERMISSION.ACCESS\u精细位置,this.androidPermissions.PERMISSION.ACCESS\u额外位置命令]);
this.geo.getCurrentPosition(this.options)。然后(resp=>{
控制台日志(分别为坐标纬度);
控制台日志(分别为坐标经度);
this.getCountry(分别为坐标纬度和坐标经度);
}).catch((错误)=>{
console.log(错误)
});
});
}

您是否具有所需的权限<代码>课程地点,
好的地点
?我用安卓系统编辑了我的问题这是最近发生的变化吗?据我们所知,一些用户报告,地理定位系统在3周前停止在android设备上工作。(它在IOS上工作)@fastr.de(我没有使用ionic,只使用cordova,不知道我是否可以做类似的事情)ionic使用请求权限。但是权限请求方法是在安卓6中引入的,比3周前的版本要老得多-/
import { AndroidPermissions } from '@ionic-native/android-permissions';


constructor(private androidPermissions: AndroidPermissions) { 
    this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.LOCATION_COURSE)
     .then(
       result => console.log('Has permission?', result.hasPermission),
       err => this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.LOCATION_COURSE)
     );
}