1

С 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> 

ответ

0

Вам нужен ti.permissions модуль и перекомпилировать версию TiSDK:

  • Перейти под Titanium SDK справочник, например: /Users/[YOUR USER]/Library/Application Support/Titanium/mobilesdk/osx/
  • Дубликат каталог 5.2.0.GA и переименовать его в 5.2.0.WhatYouWant
  • Go под android подкаталог и заменить 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"/> внутри tiapp.xml под <android .... > узла

и после этого, вы можете запросить разрешение на хранение с этим фрагментом:

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"); 
}); 
+0

Я не могу видеть свою папку 5.2.0.GA sdk в/Users/[me]/Library/Application Support/Titanium/mobilesdk/osx/... Я вижу только старые папки SDK 3.5.1.GA и 5.0.2.GA? !! Есть ли другой путь для расположения 5.2.0.GA? – gsoulie

+1

Хорошо, я нашел свой путь 5.2d.GA sdk и выполнил все приведенные выше инструкции. У меня больше нет ошибки, но функция обратного вызова не выполняется после запроса разрешения ... Я использую последнюю версию модуля ti.permissions (v0.4) – gsoulie

+0

Я создал билет JIRA, который вы можете посмотреть, чтобы получить это исправление в SDK: https://jira.appcelerator.org/browse/TIMOB-20544 –

Смежные вопросы