如何在Android 6.0上请求运行时记录权限? [英] How to request run-time recording permission on Android 6.0?
问题描述
从Android 6.0开始,我们需要在应用运行时请求权限.
Since Android 6.0, we need to request permissions during app runtime.
在我的应用中,我正在使用本地存储,摄像头,地理位置和录音权限.
In my app, i'm using local storage, camera, geolocation and audio recording permissions.
因此,使用该代码段请求本地存储,摄像头和地理位置定位是可以的: https://github.com/appcelerator-developer-relations/appc-sample-ti510/blob/master/app/controllers/permissions.js
So, requesting for local storage, camera and geolocation is ok with that snippet : https://github.com/appcelerator-developer-relations/appc-sample-ti510/blob/master/app/controllers/permissions.js
但是我还没有找到如何请求音频录制权限的方法...我实际上使用了适用于Android的titutorial.audiorecorder模块,并且由于未启用录制权限而自Android 6.0开始尝试录制时崩溃了.
But i've not found how to request for audio recording permission...I actually use titutorial.audiorecorder module for Android and it crashes when i tried to record since Android 6.0 because permission for recording is not enable.
有关我的环境的更多信息:
More informations on my environment :
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
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的重新编译版本:
You need the ti.permissions module and a recompiled version of TiSDK :
- 进入Titanium SDK目录,例如:
/Users/[YOUR USER]/Library/Application Support/Titanium/mobilesdk/osx/
- 复制5.2.0.GA目录并将其重命名为5.2.0.WhatYouWant
- 进入
android
子目录,并用以下jar替换titanium.jar
:.
- Go under your Titanium SDK directory eg:
/Users/[YOUR USER]/Library/Application Support/Titanium/mobilesdk/osx/
- Duplicate the 5.2.0.GA directory and rename it as 5.2.0.WhatYouWant
- Go under
android
subdir and replacetitanium.jar
with this jar : https://github.com/AppWerft/Tierstimmenarchiv/blob/master/modules/android/titanium.jar - After that in your project, inside the
tiapp.xml
replace<sdk-version>5.2.0.GA</sdk-version>
with your new named SDK (5.2.0.WhatYouWant) don't forget to insert<uses-permission android:name="android.permission.RECORD_AUDIO"/>
inside thetiapp.xml
under the<android .... >
node
然后,您可以使用以下代码段请求存储权限:
and after that, you can request storage permission with this snippet:
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 6.0上请求运行时记录权限?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!