我正在使用PhoneGap构建应用程序.虽然使用的PhoneGap的地理位置API,我意识到,这些API超时的原因有两个,并同样的错误被抛出:1.如果用户的设备2.未启用GPS如果GPS已启用,并且不能够得到的位置用户(可能有几个原因,GPS故障,天气不明等)
我在区分原因方面遇到了问题?有关如何做的任何想法?
我想知道是否有任何方法,我可以使用Phonegap检查用户设备上的GPS是否处于活动状态,这样我就可以将其作为单独检查并将用户引导到通常放置GEO设置的设置窗口.不知道怎么做?自定义phonegap插件可能是?
Kin*_*xit 37
您可以在调用getCurrentPosition时检查geolocationError的PositionError参数中的错误代码.我猜测,当gps未启用时,它将是PositionError.PERMISSION_DENIED;当启用gps时,它将是PositionError.POSITION_UNAVAILABLE或PositionError.TIMEOUT但是还有其他问题.
请注意,这取决于平台.你可能不得不写一个人为的错误信息,上面写着"无法获得当前的位置.无论是GPS信号都很弱还是GPS已经关闭".
你可以尝试的一件事是用一个非常小的超时调用getCurrentPosition,比如说1 ms.如果它说权限被拒绝,您可以断定gps已被禁用,如果超时,您可以假设已启用gps.我没有时间对此进行测试,您可以根据测试结果编辑此答案.
您可以尝试的另一件事是使用android的诊断phonegap插件.你必须确保你也使用其他平台的插件,但它们也都在那里.
为了最优雅地处理这种情况,您可以使用cordova.plugins.diagnostic检查GPS设置是否已启用(在Android 6+上)检查应用程序是否具有运行时授权,以及(如果未启用),用于cordova-plugin-request-location-accuracy通过本机自动打开GPS对话框,无需用户通过设置页面手动打开它.但是,由于后者依赖于设备上的最新Google Play服务库,因此如果自动切换失败,最好还是回退到手动切换.
首先将所需的插件添加到项目中:
cordova plugin add cordova.plugins.diagnostic --save
cordova plugin cordova-plugin-request-location-accuracy --save
Run Code Online (Sandbox Code Playgroud)
然后你会这样做:
function checkAvailability(){
cordova.plugins.diagnostic.isGpsLocationAvailable(function(available){
console.log("GPS location is " + (available ? "available" : "not available"));
if(!available){
checkAuthorization();
}else{
console.log("GPS location is ready to use");
}
}, function(error){
console.error("The following error occurred: "+error);
});
}
function checkAuthorization(){
cordova.plugins.diagnostic.isLocationAuthorized(function(authorized){
console.log("Location is " + (authorized ? "authorized" : "unauthorized"));
if(authorized){
checkDeviceSetting();
}else{
cordova.plugins.diagnostic.requestLocationAuthorization(function(status){
switch(status){
case cordova.plugins.diagnostic.permissionStatus.GRANTED:
console.log("Permission granted");
checkDeviceSetting();
break;
case cordova.plugins.diagnostic.permissionStatus.DENIED:
console.log("Permission denied");
// User denied permission
break;
case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS:
console.log("Permission permanently denied");
// User denied permission permanently
break;
}
}, function(error){
console.error(error);
});
}
}, function(error){
console.error("The following error occurred: "+error);
});
}
function checkDeviceSetting(){
cordova.plugins.diagnostic.isGpsLocationEnabled(function(enabled){
console.log("GPS location setting is " + (enabled ? "enabled" : "disabled"));
if(!enabled){
cordova.plugins.locationAccuracy.request(function (success){
console.log("Successfully requested high accuracy location mode: "+success.message);
}, function onRequestFailure(error){
console.error("Accuracy request failed: error code="+error.code+"; error message="+error.message);
if(error.code !== cordova.plugins.locationAccuracy.ERROR_USER_DISAGREED){
if(confirm("Failed to automatically set Location Mode to 'High Accuracy'. Would you like to switch to the Location Settings page and do this manually?")){
cordova.plugins.diagnostic.switchToLocationSettings();
}
}
}, cordova.plugins.locationAccuracy.REQUEST_PRIORITY_HIGH_ACCURACY);
}
}, function(error){
console.error("The following error occurred: "+error);
});
}
checkAvailability(); // start the check
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41642 次 |
| 最近记录: |