1

Я пытаюсь вызвать модуль геолокации в том, что, по моему мнению, очень простой способ, но я запутался в ошибках. Я тестирую на физическом телефоне, который является Samsung Galaxy S3 под управлением Android 4.4.2. Вот код, который запускается с внутри .js контроллера для моей страницы:Appcelerator Titanium 5.5.1 Android Geolocation Module Дает checkSelfPermission и requestPermissions Errors

function getGPSCoordinates() { 
    if (Ti.Geolocation.locationServicesEnabled) { 
    Ti.Geolocation.purpose = 'Corollate photos with store location'; 
    Ti.Geolocation.preferredProvider = Ti.Geolocation.PROVIDER_GPS; 
    Ti.Geolocation.getCurrentPosition(function(e) { 
     if (e.error == true) 
     console.error(e.error); 
     else 
     console.warn(e.coords); 
    }); 
    } 
} 

if (Ti.Geolocation.locationServicesEnabled) 
    getGPSCoordinates(); 
else { 
    Ti.Geolocation.requestLocationPermissions(Ti.Geolocation.AUTHORIZATION_WHEN_IN_USE, function(e) { 
    getGPSCoordinates(); 
    }); 
} 

... и вот ошибки возвращаются в журнале:

[INFO] : dalvikvm: Could not find method android.app.Activity.checkSelfPermission, referenced from method ti.modules.titanium.geolocation.GeolocationModule.hasLocationPermissions 
[WARN] : dalvikvm: VFY: unable to resolve virtual method 27: Landroid/app/Activity;.checkSelfPermission (Ljava/lang/String;)I 
[INFO] : dalvikvm: Could not find method android.app.Activity.requestPermissions, referenced from method ti.modules.titanium.geolocation.GeolocationModule.requestLocationPermissions 
[WARN] : dalvikvm: VFY: unable to resolve virtual method 74: Landroid/app/Activity;.requestPermissions ([Ljava/lang/String;I)V 

Я сделал чистое строить и проблемы сохраняются. Я также посмотрел на сборки/Android/AndroidManifest.xml и может видеть, что соответствующие разрешения быть автоматически добавляются в манифесте:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> 

Соответствующие части моей среды разработки заключаются в следующем:

Operating System 
    Name      = Mac OS X 
    Version      = 10.11.6 
    Architecture    = 64bit 
    # CPUs      = 8 
    Memory      = 16.0GB 

Node.js 
    Node.js Version    = 0.12.7 
    npm Version     = 2.11.3 

Appcelerator CLI 
    Installer     = 4.2.7 
    Core Package    = 5.5.1 

Titanium CLI 
    CLI Version     = 5.0.9 
    node-appc Version   = 0.2.31 

Titanium SDKs 
    5.5.1.GA 
    Version     = 5.5.1 
    Install Location   = /Users/xxxxxxxxxx/Library/Application Support/Titanium/mobilesdk/osx/5.5.1.GA 
    Platforms     = android, mobileweb, iphone 
    git Hash     = b18727f 
    git Timestamp    = 09/27/16 05:38 
    node-appc Version   = 0.2.36 

Mac OS X 
    Command Line Tools   = installed 

Intel® Hardware Accelerated Execution Manager (HAXM) 
    Installed     = yes 
    Memory Limit    = 2 GB 

Java Development Kit 
    Version      = 1.8.0_102 
    Java Home     = /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home 

Android SDK 
    Android Executable   = /Users/xxxxxxxxxx/Library/Android/sdk/tools/android 
    ADB Executable    = /Users/xxxxxxxxxx/Library/Android/sdk/platform-tools/adb 
    SDK Path     = /Users/xxxxxxxxxx/Library/Android/sdk 

Android NDK 
    NDK Path     = not found 
    NDK Version     = not found 

Android Platforms 
    1) android-23 
    Name      = Android 6.0 
    API Level     = 23 
    Revision     = 3 
    Skins      = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in 
    ABIs      = x86 
    Path      = /Users/xxxxxxxxxx/Library/Android/sdk/platforms/android-23 

Android Add-Ons 
    None 

Connected Android Devices 
SPH-L710 
    ID       = 8c1af53b 
    State      = device 
    SDK Version     = 4.4.2 (android-19) 
    ABIs      = armeabi-v7a, armeabi 

Пожалуйста, дайте мне знать, если есть что-то, что я должен делать по-другому. Спасибо!

ответ

0

У вас есть разрешения на размещение на устройстве? Проверьте свои настройки и включите их для приложения и проверьте это (https://docs.appcelerator.com/platform/latest/#!/api/Titanium.Geolocation-method-requestLocationPermissions), чтобы убедиться, что у вас есть разрешения перед запросом местоположения.

Также есть еще одна тема, которая имела аналогичный отчет, который может дать вам некоторое представление. (Appcelerator Could not find method android.app.Activity.checkSelfPermission)

+0

Я вызываю метод requestLocationPermissions(), если обнаруживаю, что Ti.Geolocation.locationServicesEnabled = false. Я видел другую тему, о которой вы говорили ранее, но скриншот, который он показывает, вручную переходит в настройки и включает GPS. Я думаю, что большинство людей покидают GPS, и я хочу, чтобы Appcelerator попросил их снова включиться, если это необходимо. – ComputerTinker

+0

Получите запрос, чтобы приложение могло использовать GPS при запуске кода? Я просто попробовал свой код быстро на своем Nexus 6P под управлением Android 7, и он работал без проблем. – Ray

+0

Нет, я никогда не вижу этого запроса, но это то, что я хочу. Похоже, может быть ошибка в том, как это работает в отношении используемой версии Android: https://jira.appcelerator.org/browse/TIMOB-23135 – ComputerTinker