如何在Android 6.0上申请运行时录制权限?
作者:互联网
从Android 6.0开始,我们需要在app运行时期间请求权限.
在我的应用程序中,我使用本地存储,相机,地理位置和录音权限.
因此,请求本地存储,相机和地理位置就可以使用该片段:
https://github.com/appcelerator-developer-relations/appc-sample-ti510/blob/master/app/controllers/permissions.js
但我还没有找到如何申请录音权限……我实际上使用了适用于Android的titutorial.audiorecorder模块,当我尝试自Android 6.0以来录制时它崩溃了,因为录制许可不是启用的.
有关我的环境的更多信息:
Operating System
Name = Mac OS X
Version = 10.11.3
Architecture = 64bit
# CPUs = 4
Memory = 17179869184
Node.js
Node.js Version = 0.12.7
npm Version = 2.11.3
Titanium CLI
CLI Version = 5.0.6
Titanium SDK
SDK Version = 5.2.0.GA
SDK Path = /Users/****/#/mobilesdk/osx/5.2.0.GA
Target Platform = android
Appcelerator Studio 4.5.0.201602170821
tiapp.xml
<manifest>
<uses-sdk android:minSdkVersion="15"/>
<uses-sdk android:targetSdkVersion="23"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
<uses-permission android:name="com.mycompany.myapp.permission.MAPS_RECEIVE"/>
...
...
</manifest>
解决方法:
您需要ti.permissions模块和TiSDK的重新编译版本:
>转到Titanium SDK目录下,例如:/ Users / [您的用户] /库/应用程序支持/ Titanium / mobilesdk / osx /
>复制5.2.0.GA目录并将其重命名为5.2.0.WhatYouWant
>转到android subdir下,用这个jar替换titanium.jar:https://github.com/AppWerft/Tierstimmenarchiv/blob/master/modules/android/titanium.jar
>在您的项目之后,在tiapp.xml内替换< sdk-version> 5.2.0.GA< / sdk-version>使用新命名的SDK(5.2.0.WhatYouWant)不要忘记插入< uses-permission android:name =“android.permission.RECORD_AUDIO”/>在< android ....>下的tiapp.xml里面节点
之后,您可以使用此代码段请求存储权限:
if (!require('ti.permissions').hasPermission('android.permission.RECORD_AUDIO'))
require('ti.permissions').requestPermissions(['android.permission.RECORD_AUDIO'], function(e) {
if (e.success != 0)
Ti.API.debug("Permissions OK");
else
Ti.API.warn("Permissions denied");
});
标签:android,appcelerator,appcelerator-titanium,audio-recording,runtime-permissions 来源: https://codeday.me/bug/20191001/1839946.html