应用程序在requestLocationPermissions之前崩溃

时间:2017-03-02 13:54:48

标签: android geolocation titanium

我在Titanium上使用ti.map进行应用程序。

来自Android6 许可制度正在发生变化 我必须在安装时才提供权限,但是在运行的应用程序中。

我制作了这些代码,但它的工作原理如下。

  • 首次发布。

如果您尝试显示地图,则会崩溃。但是警告(允许访问此设备的位置?)仍然存在。

  • 第二次发布 如果您在首次启动时触及是。它可以正常显示地图。

我认为问题是,在返回requestLocationPermissions对话框的结果之前尝试打开地图时发生了崩溃。

但是,仅当用户尝试按Ti.Geolocation.requestLocationPermissions打开地图时,才会触发requestLocationPermissions对话框。 因此,在提前打开地图之前无法询问用户是否允许。

总结

我想事先激活requestLocationPermissions回调。

所以这是我的代码。

if (Ti.Platform.osname === 'android'){
    var hasLocationPermissions = Ti.Geolocation.hasLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS);
    Ti.API.info('Ti.Geolocation.hasLocationPermissions : ' +  hasLocationPermissions);
    if (hasLocationPermissions) {
        Ti.API.info('You already have permission.');
    }
    else {
        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();
            }
        });
    }
}

错误信息如下。

[ERROR] TiApplication: (main) [13751,15075] Sending event: exception on thread: main msg:java.lang.SecurityException: my location requires permission ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION; Titanium 6.0.1,2016/12/19 16:51,undefined
[ERROR] TiApplication: java.lang.SecurityException: my location requires permission ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION
[ERROR] TiApplication:  at com.google.maps.api.android.lib6.impl.az.c(:com.google.android.gms.DynamiteModulesB:50297)

2 个答案:

答案 0 :(得分:1)

Android上的

调用没有参数的函数

Ti.Geolocation.hasLocationPermissions();

Documentation

答案 1 :(得分:0)

将targetsdk版本21设置为build.gradle。你的问题将得到解决。