询问GPS位置时应用崩溃(仅限Android)

时间:2018-10-04 19:10:35

标签: react-native react-native-navigation

问题说明

询问gps位置时,我的应用程序崩溃(仅ANDROID)。 该对话框按预期显示,当我接受或拒绝该权限时,我的应用程序崩溃,并显示以下错误:

  

尝试在未附加到活动的情况下使用权限API。

但是即使出现错误,我的应用也获得了许可,并且如果我重新打开该应用也可以正常工作。

我认为这是一个问题,因为我的活动会随着react-native-navigation的实现而变化。

经过大量阅读后,似乎有一个接口可以在android上实现权限,但是我不知道该如何在我的活动中实现。

复制/代码段/屏幕截图的步骤

使用标签启动应用程序:

Navigation.startTabBasedApp({
        tabs: [
            {
                label: 'Perfil',
                screen: 'tab.profile',
                icon: profileIcon, 
                navigatorStyle: {
                    navBarHidden: true,
                    navBarTextFontSize: 16
                }
            },
            {
                label: 'Paquerar',
                screen: 'tab.main',
                icon: heartIcon, 
                navigatorStyle: {
                    navBarHidden: true,
                    navBarTextFontSize: 16
                }
            },
            {
                label: 'Paqueras',
                screen: 'tab.chat',
                icon: paqueraIcon, 
                navigatorStyle: {
                    navBarHidden: true,
                    navBarTextFontSize: 16
                }
            }
        ],
        tabsStyle: { 
            tabBarButtonColor: theme.palette.grayscale[1],
            tabBarSelectedButtonColor: theme.palette.secondary,
            tabBarBackgroundColor: theme.palette.white,
            initialTabIndex: 1,
            tabBarHideShadow: false,
        },
        appStyle: {
            orientation: 'portrait',
            hideBackButtonTitle: true ,
            initialTabIndex: 1,
        }
    });

在主选项卡上,我要求获得componenetDidMount的许可

try {
            const granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION);

            if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                return true;
            }
            else{
               return false;
            }
        }catch (err) {

        }

在androidManifest上

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

     <!-- for Android 5.0 (API level 21) or higher. -->
    <uses-feature android:name="android.hardware.location.gps" />
    <uses-feature android:name="android.hardware.location.network" />`

MainActivity
`package com.beachpaqueraapp;

import com.facebook.react.ReactActivity;
import com.reactnativenavigation.controllers.SplashActivity;


public class MainActivity extends SplashActivity {

    protected String getMainComponentName() {
        return "BeachPaqueraApp";
    }

}

在MainApplication上

package com.beachpaqueraapp;

import android.app.Application;

import com.facebook.react.ReactApplication;
import com.reactnative.ivpusic.imagepicker.PickerPackage;
import com.bitgo.randombytes.RandomBytesPackage;
import com.BV.LinearGradient.LinearGradientPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import com.reactnativenavigation.NavigationApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;


import java.util.Arrays;
import java.util.List;

public class MainApplication extends NavigationApplication implements ReactApplication {


  protected List<ReactPackage> getPackages() {
    return Arrays.<ReactPackage>asList(
        new MainReactPackage(),
            new PickerPackage(),
            new RandomBytesPackage(),
            new LinearGradientPackage(),
            new VectorIconsPackage()
    );
  }

  @Override
    public boolean isDebug() {
    return BuildConfig.DEBUG;
    }

  @Override
    public List<ReactPackage> createAdditionalReactPackages() {
        return getPackages();
    }

    @Override
    public String getJSMainModuleName() {
        return "index";
    }

}

环境

  • 反应本机导航版本:0.56.0
  • 反应本机版本:1.1.480
  • 平台(iOS,Android还是两者都使用):ANDROID
  • 设备信息(仿真器/设备?操作系统版本?调试/发布?):调试和发布。 仿真器:GENYMOTION NEXUS 6(Android 8) 设备:MOTO G4(Android 8) 设备:XIAOMI REDMI NOTE 5(ANDROID 8.1)

0 个答案:

没有答案