询问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";
}
}