Appcelerator Não foi possível encontrar o método android.app.Activity.checkSelfPermission

Não consigo obter a localização geográfica para funcionar no Android, apenas recebo o seguinte bug.

[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 32: 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 82: Landroid/app/Activity;.requestPermissions ([Ljava/lang/String;I)V

Meu código é o seguinte.

Ti.Geolocation.purpose = "Please allow us to find you.";
//Ti.Geolocation.showCalibration = false;
if (OS_ANDROID) {
    Titanium.Geolocation.Android.LocationProvider = Ti.Geolocation.PROVIDER_GPS;
}
Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_BEST;
Ti.Geolocation.distanceFilter = 10;

Ti.Geolocation.requestLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS, function(e) {
    console.log(e);

    if (!e.success || e.error) {

        var dialog = Ti.UI.createAlertDialog({
            message : 'You do not have location permissions enabled.',
            ok : 'Got it',
            title : 'Important'
        });

        dialog.addEventListener('click', function(e) {

            if (OS_IOS) {
                Ti.Platform.openURL('app-settings:');
            }

            if (OS_ANDROID) {
                var intent = Ti.Android.createIntent({
                    action : 'android.settings.APPLICATION_SETTINGS',
                });
                intent.addFlags(Ti.Android.FLAG_ACTIVITY_NEW_TASK);
                Ti.Android.currentActivity.startActivity(intent);
            }

        });

        dialog.show();

        return;

    }

    Titanium.Geolocation.getCurrentPosition(getGeoPosition);

});

Quando eu executo isso, ele fica parado há horas, agora tentando depurar tão perto de desistir de tentar tudo o que consigo pensar.

Appcelerator 5.1.2.GA

CÓDIGO COMPLETO PARA TESTE

function getGeoPosition(_event) {
    console.log(_event);
    alert(JSON.stringify(_event));
}

Ti.Geolocation.purpose = "Please allow us to find you.";
Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_BEST;
Ti.Geolocation.distanceFilter = 10;

/**
 * Event listener added in the view.
 * Fired when user taps on the Ti.Geolocation button.
 */
function geolocation() {

    // The new cross-platform way to check permissions
    // The first argument is required on iOS and ignored on other platforms
    var hasLocationPermissions = Ti.Geolocation.hasLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS);

    if (hasLocationPermissions) {
        alert('You already have permission.');
        Titanium.Geolocation.getCurrentPosition(getGeoPosition);
    }

    // On iOS we can get information on the reason why we might not have permission
    if (OS_IOS) {

        // Map constants to names
        var map = {};
        map[Ti.Geolocation.AUTHORIZATION_ALWAYS] = 'AUTHORIZATION_ALWAYS';
        map[Ti.Geolocation.AUTHORIZATION_AUTHORIZED] = 'AUTHORIZATION_AUTHORIZED';
        map[Ti.Geolocation.AUTHORIZATION_DENIED] = 'AUTHORIZATION_DENIED';
        map[Ti.Geolocation.AUTHORIZATION_RESTRICTED] = 'AUTHORIZATION_RESTRICTED';
        map[Ti.Geolocation.AUTHORIZATION_UNKNOWN] = 'AUTHORIZATION_UNKNOWN';
        map[Ti.Geolocation.AUTHORIZATION_WHEN_IN_USE] = 'AUTHORIZATION_WHEN_IN_USE';

        // Available since Ti 0.8 for iOS and Ti 4.1 for Windows
        // Always returns AUTHORIZATION_UNKNOWN on iOS<4.2
        var locationServicesAuthorization = Ti.Geolocation.locationServicesAuthorization;

        if (locationServicesAuthorization === Ti.Geolocation.AUTHORIZATION_RESTRICTED) {
            alert('Because permission are restricted by some policy which you as user cannot change, we don\'t request as that might also cause issues.');

        } else if (locationServicesAuthorization === Ti.Calendar.AUTHORIZATION_DENIED) {

            alert('You denied permission before');
        }
    }

    // The new cross-platform way to request permissions
    // The first argument is required on iOS and ignored on other platforms
    Ti.Geolocation.requestLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS, function(e) {

        if (e.success) {

            // Instead, probably call the same method you call if hasLocationPermissions() is true
            alert('You granted permission.');

        } else if (OS_ANDROID) {
            alert('You denied permission for now, forever or the dialog did not show at all because it you denied forever before.');

        } else {

            // We already check AUTHORIZATION_DENIED earlier so we can be sure it was denied now and not before
            Ti.UI.createAlertDialog({
                title : 'You denied permission.',

                // We also end up here if the NSLocationAlwaysUsageDescription is missing from tiapp.xml in which case e.error will say so
                message : e.error
            }).show();
        }
    });
}

geolocation();

// Handle the URL in case it resumed the app
Ti.App.addEventListener("resume", function() {
    geolocation();
});

Localizando a versão mais recente ... 5.1.0 ✓ Versão 5.1.0 já instalada. ? Você planeja desenvolver aplicativos Titanium? sim

Checking your environment...

You have the latest Titanium SDK release 5.1.2.GA
Congrats! No issues detected for developing cross-platform mobile apps!

appc setup complete!

ATUALIZAÇÃO GERENCIAR QUE FUNCIONE MAS POR QUE !!!!

Ok, então eu consegui fazê-lo funcionar, indo para a configuração dos meus locais, desativando-os e ligando-os novamente e clique em Concordo ???? estranho não pode estar certo?

Isso é muuuuito irritante, eu tenho que fazer isso toda vez para que os serviços de locais funcionem?

Atualização Eu acho que uma das principais razões pelas quais eu estou recebendo um problema é porque eu estava solicitando permissões para cada carregamento no ouvinte de eventos após o layout, isso parece corrigir o problema.

 var hasLocationPermissions = Ti.Geolocation.hasLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS);

 if (hasLocationPermissions) {
     alert('You already have permission.');
     Titanium.Geolocation.getCurrentPosition(getGeoPosition);
 } else {
     Ti.Geolocation.requestLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS, function(e) {

         if (e.success) {

             Titanium.Geolocation.getCurrentPosition(getGeoPosition);

         } else if (OS_ANDROID) {
             alert('You denied permission for now, forever or the dialog did not show at all because it you denied forever before.');

         } else {

             // We already check AUTHORIZATION_DENIED earlier so we can be sure it was denied now and not before
             Ti.UI.createAlertDialog({
                 title: 'You denied permission.',

                 // We also end up here if the NSLocationAlwaysUsageDescription is missing from tiapp.xml in which case e.error will say so
                 message: e.error
             }).show();
         }
     });

 }

Ainda parece estar recebendo todos os tipos de outros problemas em que o GPS não é ativado toda vez que vou ficar com isso e relatar as atualizações.

questionAnswers(0)

yourAnswerToTheQuestion