在Android Marshmallow中,我们需要在应用程序中单独授予位置、文件等访问权限。在PhoneGap应用程序中,是否有一种方法可以检查权限是否可用,并提示用户提供权限?
更新 2016年02月16日
Phonegap Build现在支持API 23 - 棒极了!
或者如果您在本地构建,只需使用Cordova/Phonegap CLI 6+,默认会得到cordova-android@5+平台。
原回答
目前,使用Cordova/Phonegap CLI确实可以做到这一点,但是Phonegap Build还不支持API 23(Android 6.0 / Marshmallow)。
首先,您需要使用Android平台的v5.0.0(或更高版本),这个版本使用API 23。
截至今天,默认版本为4.1.1(使用API 22),因此在添加平台时需要显式指定版本:
cordova platform add android@5.0.0
phonegap platform add android@5.0.0
核心插件正在升级,以支持请求适当的Android 6运行时权限。因此,您需要直接从GitHub repos的master分支安装“ bleeding edge”版本,而不是通过npm插件注册表安装。例如,请使用:
cordova plugin add https://github.com/apache/cordova-plugin-file
这应该让您得到版本4.0.1-dev。
不是npm发布版本:
cordova plugin add cordova-plugin-file
这将为您获取v3.0.0版本。
请注意,主分支上的版本不是发布版,可能包含错误。
因此,替代方法(我选择的方法)是继续使用插件的发布版本(暂不支持请求Android运行时权限),但使用cordova-diagnostic-plugin来请求相应核心插件在尝试使用核心插件API之前需要的Android运行时权限。
例如,要使用Location插件,请继续通过npm使用发布版本:
cordova plugin add cordova-plugin-geolocation
function requestLocation(){
navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
}
cordova.plugins.diagnostic.getLocationAuthorizationStatus(function(status){
if(status == "GRANTED"){
requestLocation();
}else{
cordova.plugins.diagnostic.requestLocationAuthorization(function(status){
if(status == "GRANTED"){
requestLocation();
}else{
// Handle other cases
}
}, function(error){
console.error(error);
});
}
}, onError);
cordova plugin add cordova-plugin-file@4.0.0 --save
命令来安装最新版本的插件。 - jcesarmobile