在Android的特定屏幕上寻求许可

时间:2019-07-08 11:43:13

标签: react-native android-permissions react-native-navigation-v2

对于react native应用程序导航,我使用react-native-navigation v2,这里我使用bottomTabs创建了导航。这是导航处理程序

import { Navigation } from "react-native-navigation";
import { width, height } from "../utils/screenResolution";
import { bottomTabIcon, topBarOpts } from "../components";

const sideBarWidth = width * 0.65;

export const goToAuth = () =>
  Navigation.setRoot({
    root: {
      stack: {
        id: "AuthNav",
        children: [
          {
            component: {
              name: "SignInScreen",
              options: {
                topBar: { visible: false, height: 0 }
              }
            }
          }
        ]
      }
    }
  });

export const goHome = async () => {
  let icon1 = await bottomTabIcon("CollectionScreen", "Collection", "archive");
  let icon2 = await bottomTabIcon("MainScreen", "Home", "home");

  let icon3 = await bottomTabIcon("CaptureScreen", "Capture", "camera");
  Navigation.setRoot({
    root: {
      sideMenu: {
        right: {
          component: {
            name: "SideBar"
          }
        },
        center: {
          bottomTabs: {
            id: "AppNav",
            children: [icon1, icon2, icon3]
          }
        },
        options: {
          sideMenu: {
            right: {
              width: sideBarWidth
            }
          }
        }
      }
    }
  });
  Navigation.mergeOptions("MainScreen", {
    bottomTabs: {
      currentTabIndex: 1
    }
  });
};

使用bottomTabIcon函数创建的图标标签。

import Icon from "react-native-vector-icons/FontAwesome";
import { topBarOpts } from "./";
import { PRIMARY, BOTTOM_TAB_BACKGROUND, TAB_ICON } from "../../assets/color";

let bottomTabIcon = async (name, text, iconName) => {
  let icon = {
     stack: {
       children: [
         {
    component: {
      name: name,
      id: name,
      options: {
        bottomTab: {
          text: text,
          fontSize: 12,
          selectedIconColor: PRIMARY,
          iconColor: TAB_ICON,
          icon: await Icon.getImageSource(iconName, 20)
        }
      }
    }
         }
      ]
    }
  };

  if (name === "CaptureScreen") {
    icon.stack.children[0].component.options.bottomTabs = {
      visible: false,
      drawBehind: true,
      animate: true
    };
    icon.stack.children[0].component.options.topBar = {
      visible: false,
      height: 0
    };
  } else {
    icon.stack.children[0].component.options.bottomTabs = {
      backgroundColor: BOTTOM_TAB_BACKGROUND
    };
    icon.stack.children[0].component.options.topBar = await topBarOpts("Example");
  }

  return icon;
};

export { bottomTabIcon };

这是问题所在,当用户登录应用程序时,它要在MainScreen中询问权限(摄像机,音频等),我想在特定屏幕中执行此操作,之后我发现在bottomTab中的所有屏幕都已安装。我在CaptureScreen的componentDidMount中调用某项操作,它将在MainScreen中运行。如何解决这一部分?我在react-native方面还很陌生,因此您可以在这段代码中找到一些奇怪的东西。感谢帮助和关注。

1 个答案:

答案 0 :(得分:1)

仅在特定屏幕的安装中或在不需要父屏幕或导航器中的子屏幕中才需要权限调用。

在您的情况下,您通过在react导航中获取路线索引来调用它们。在子屏幕上或在需要权限的地方添​​加权限代码,它们将开始起作用。