如何在Android 6.0 上请求运行 次录制权限?
How to request run-time recording permission on Android 6.0?
从Android 6.0开始,我们需要在应用程序运行时请求权限。
在我的应用中,我使用了本地存储、相机、地理定位和录音权限。
因此,请求本地存储、摄像头和地理定位对于该代码段是可行的:
https://github.com/appcelerator-developer-relations/appc-sample-ti510/blob/master/app/controllers/permissions.js
但我还没有找到如何请求录音权限...我实际上使用 titutorial.audiorecorder 模块 Android,但自从 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/[YOUR USER]/Library/Application Support/Titanium/mobilesdk/osx/
- 复制 5.2.0.GA 目录并将其重命名为 5.2.0.WhatYouWant
- 进入
android
子目录并用这个 jar 替换 titanium.jar
:https://github.com/AppWerft/Tierstimmenarchiv/blob/master/modules/android/titanium.jar
- 之后在你的项目中,在
tiapp.xml
中用你新命名的 SDK (5.2.0.WhatYouWant) 替换 <sdk-version>5.2.0.GA</sdk-version>
不要忘记在里面插入 <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 6.0开始,我们需要在应用程序运行时请求权限。
在我的应用中,我使用了本地存储、相机、地理定位和录音权限。
因此,请求本地存储、摄像头和地理定位对于该代码段是可行的: https://github.com/appcelerator-developer-relations/appc-sample-ti510/blob/master/app/controllers/permissions.js
但我还没有找到如何请求录音权限...我实际上使用 titutorial.audiorecorder 模块 Android,但自从 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/[YOUR USER]/Library/Application Support/Titanium/mobilesdk/osx/
- 复制 5.2.0.GA 目录并将其重命名为 5.2.0.WhatYouWant
- 进入
android
子目录并用这个 jar 替换titanium.jar
:https://github.com/AppWerft/Tierstimmenarchiv/blob/master/modules/android/titanium.jar - 之后在你的项目中,在
tiapp.xml
中用你新命名的 SDK (5.2.0.WhatYouWant) 替换<sdk-version>5.2.0.GA</sdk-version>
不要忘记在里面插入<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");
});