appcelerator-titaniumtitanium-android

Titanium - Android 6 permissions


I'm having an error when I try to ask for permissions on Android 6.

My function is:

// check ACCESS_FINE_LOCATION permission
var location2Permission = "android.permission.ACCESS_FINE_LOCATION";
var hasLocation2Permission = Ti.Android.hasPermission(location2Permission);

if(!hasLocation2Permission){
    permissionsToRequest.push(location2Permission);
}

// request permission
Ti.Android.requestPermissions(permissionsToRequest, function(e) {
    if (e.success) {
        Ti.API.info("SUCCESS");
        callback();
    } else {
        Ti.API.info("ERROR: " + e.error);
    }
}); 

And the error is:

Message: Uncaught TypeError: Object #<Android> has no method 'requestPermissions'

Whats happening? Because in Titanium Docs this function exists. I'm using Ti.SDK 5.1.2.GA


Solution

  • // The first argument is required on iOS and ignored on other platforms
    var hasLocationPermissions = Ti.Geolocation.hasLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS);
    Ti.API.info('Ti.Geolocation.hasLocationPermissions', hasLocationPermissions);
    
    if (hasLocationPermissions) {
        return alert('You already have permission.');
    }
    
    Ti.Geolocation.requestLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS, function(e) {
        Ti.API.info('Ti.Geolocation.requestLocationPermissions', 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();
        }
    });
    

    for more you can look in the link and also in the docs