PhoneGap中Android Marshmallow的应用权限

在Android Marshmallow中,我们需要在Apps中分别授予对Location,File等的访问权限。 在PhoneGap应用程序中是否有任何我可以检查权限是否可用并提示用户提供权限。

更新2016年2月16日

Phonegap Build现在支持API 23 – hoooray!

或者如果您在本地构建,只需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的主分支安装“前沿”版本,而不是通过npm插件registry。 例如,使用:

 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来请求Android运行时权限在尝试使用核心插件API之前需要相应的核心插件。

例如,要使用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插件启用特定权限: https : //www.npmjs.com/package/cordova-plugin-android-permissions

特别是对于较旧的插件,这可能非常有用。