Khóa học react-native

PermissionAndroid trong React Native

0 phút đọc

PermissionAndroid là một module trong React Native cho phép bạn yêu cầu và kiểm tra các quyền (permissions) trên các thiết bị Android. Việc quản lý quyền là rất quan trọng để đảm bảo rằng ứng dụng của bạn có thể truy cập các tài nguyên hệ thống như camera, vị trí, bộ nhớ, và nhiều hơn nữa. PermissionAndroid cung cấp các phương thức để yêu cầu quyền, kiểm tra trạng thái quyền, và xử lý các phản hồi từ người dùng.

Cú Pháp Cơ Bản

Để sử dụng PermissionAndroid trong React Native, bạn cần import nó từ thư viện react-native và sử dụng các phương thức của nó để yêu cầu và kiểm tra quyền.

javascript Copy
import React, { useEffect } from "react";
import {
  View,
  Text,
  Button,
  PermissionsAndroid,
  Alert,
  StyleSheet,
} from "react-native";

const App = () => {
  const requestCameraPermission = async () => {
    try {
      const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.CAMERA,
        {
          title: "Camera Permission",
          message: "This app needs access to your camera.",
          buttonNeutral: "Ask Me Later",
          buttonNegative: "Cancel",
          buttonPositive: "OK",
        }
      );
      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        Alert.alert("You can use the camera");
      } else {
        Alert.alert("Camera permission denied");
      }
    } catch (err) {
      console.warn(err);
    }
  };

  return (
    <View style={styles.container}>
      <Button
        title="Request Camera Permission"
        onPress={requestCameraPermission}
      />
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
});

export default App;

Các Phương Thức Quan Trọng của PermissionsAndroid

request

Phương thức request được sử dụng để yêu cầu một quyền cụ thể từ người dùng. Nó trả về một Promise với kết quả của yêu cầu.

Cú pháp:

javascript Copy
PermissionsAndroid.request(permission, rationale);

Ví dụ:

javascript Copy
const granted = await PermissionsAndroid.request(
  PermissionsAndroid.PERMISSIONS.CAMERA,
  {
    title: "Camera Permission",
    message: "This app needs access to your camera.",
    buttonNeutral: "Ask Me Later",
    buttonNegative: "Cancel",
    buttonPositive: "OK",
  }
);

check

Phương thức check được sử dụng để kiểm tra trạng thái của một quyền cụ thể. Nó trả về một Promise với kết quả của kiểm tra.

Cú pháp:

javascript Copy
PermissionsAndroid.check(permission);

Ví dụ:

javascript Copy
const hasPermission = await PermissionsAndroid.check(
  PermissionsAndroid.PERMISSIONS.CAMERA
);

requestMultiple

Phương thức requestMultiple được sử dụng để yêu cầu nhiều quyền cùng một lúc. Nó trả về một Promise với kết quả của từng yêu cầu.

Cú pháp:

javascript Copy
PermissionsAndroid.requestMultiple(permissions);

Ví dụ:

javascript Copy
const statuses = await PermissionsAndroid.requestMultiple([
  PermissionsAndroid.PERMISSIONS.CAMERA,
  PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
]);

Các Quyền Thường Dùng

Dưới đây là một số quyền thường được sử dụng trong các ứng dụng Android:

  • PermissionsAndroid.PERMISSIONS.CAMERA: Quyền truy cập camera.
  • PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE: Quyền đọc bộ nhớ ngoài.
  • PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE: Quyền ghi vào bộ nhớ ngoài.
  • PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION: Quyền truy cập vị trí chính xác.
  • PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION: Quyền truy cập vị trí gần đúng.
  • PermissionsAndroid.PERMISSIONS.RECORD_AUDIO: Quyền ghi âm.

Ví Dụ Chi Tiết về PermissionsAndroid

Ví Dụ 1: Yêu Cầu Quyền Truy Cập Camera

javascript Copy
import React from "react";
import {
  View,
  Text,
  Button,
  PermissionsAndroid,
  Alert,
  StyleSheet,
} from "react-native";

const CameraPermission = () => {
  const requestCameraPermission = async () => {
    try {
      const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.CAMERA,
        {
          title: "Camera Permission",
          message: "This app needs access to your camera.",
          buttonNeutral: "Ask Me Later",
          buttonNegative: "Cancel",
          buttonPositive: "OK",
        }
      );
      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        Alert.alert("You can use the camera");
      } else {
        Alert.alert("Camera permission denied");
      }
    } catch (err) {
      console.warn(err);
    }
  };

  return (
    <View style={styles.container}>
      <Button
        title="Request Camera Permission"
        onPress={requestCameraPermission}
      />
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
});

export default CameraPermission;

Ví Dụ 2: Kiểm Tra Quyền Truy Cập Vị Trí

javascript Copy
import React, { useEffect, useState } from "react";
import { View, Text, PermissionsAndroid, StyleSheet } from "react-native";

const LocationPermission = () => {
  const [hasLocationPermission, setHasLocationPermission] = useState(false);

  useEffect(() => {
    const checkLocationPermission = async () => {
      const granted = await PermissionsAndroid.check(
        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION
      );
      setHasLocationPermission(granted);
    };

    checkLocationPermission();
  }, []);

  return (
    <View style={styles.container}>
      <Text>
        {hasLocationPermission
          ? "Location permission granted"
          : "Location permission denied"}
      </Text>
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
});

export default LocationPermission;

Ví Dụ 3: Yêu Cầu Nhiều Quyền Cùng Một Lúc

javascript Copy
import React from "react";
import {
  View,
  Text,
  Button,
  PermissionsAndroid,
  Alert,
  StyleSheet,
} from "react-native";

const MultiplePermissions = () => {
  const requestMultiplePermissions = async () => {
    try {
      const statuses = await PermissionsAndroid.requestMultiple([
        PermissionsAndroid.PERMISSIONS.CAMERA,
        PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
      ]);
      if (
        statuses[PermissionsAndroid.PERMISSIONS.CAMERA] ===
          PermissionsAndroid.RESULTS.GRANTED &&
        statuses[PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE] ===
          PermissionsAndroid.RESULTS.GRANTED
      ) {
        Alert.alert("All permissions granted");
      } else {
        Alert.alert("Some permissions denied");
      }
    } catch (err) {
      console.warn(err);
    }
  };

  return (
    <View style={styles.container}>
      <Button
        title="Request Multiple Permissions"
        onPress={requestMultiplePermissions}
      />
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
});

export default MultiplePermissions;

Các Kỹ Thuật Tối Ưu Hóa Sử Dụng PermissionsAndroid

Sử Dụng StyleSheet để Tối Ưu Hóa Hiệu Suất

Sử dụng StyleSheet.create để định nghĩa các style giúp tối ưu hóa hiệu suất vì các style được tạo ra chỉ một lần và được tham chiếu lại nhiều lần.

Ví dụ:

javascript Copy
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
});

Tránh Sử Dụng Hàm Inline

Tránh sử dụng các hàm inline cho thuộc tính onPress để tránh việc tạo lại hàm mỗi khi component được render.

Ví dụ:

javascript Copy
const requestCameraPermission = async () => {
  try {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.CAMERA,
      {
        title: "Camera Permission",
        message: "This app needs access to your camera.",
        buttonNeutral: "Ask Me Later",
        buttonNegative: "Cancel",
        buttonPositive: "OK",
      }
    );
    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
      Alert.alert("You can use the camera");
    } else {
      Alert.alert("Camera permission denied");
    }
  } catch (err) {
    console.warn(err);
  }
};

<Button title="Request Camera Permission" onPress={requestCameraPermission} />;

Các Hạn Chế của PermissionsAndroid Component

Mặc dù PermissionsAndroid component trong React Native rất mạnh mẽ, nhưng nó cũng có một số hạn chế:

  1. Chỉ Hỗ Trợ Android: PermissionsAndroid chỉ hoạt động trên các thiết bị Android và không có tác dụng trên iOS.
  2. Quản Lý Quyền: Khi có nhiều quyền cần được yêu cầu, việc quản lý và xử lý các quyền có thể trở nên phức tạp.
  3. Phản Hồi Người Dùng: Người dùng có thể từ chối quyền, điều này đòi hỏi ứng dụng phải xử lý các tình huống khi quyền bị từ chối một cách hợp lý.

Kết Luận

PermissionsAndroid là một thành phần cơ bản và quan trọng trong React Native, giúp bạn tạo ra các giao diện người dùng mượt mà và hiệu quả. Bằng cách hiểu rõ các thuộc tính và cách sử dụng PermissionsAndroid, bạn có thể tạo ra các giao diện người dùng mượt mà và hiệu quả. Hy vọng qua bài viết này, bạn đã có thể nắm bắt được cách sử dụng PermissionsAndroid trong React Native và áp dụng vào các dự án của mình.

Avatar
Được viết bởi

Admin Team

Gợi ý câu hỏi phỏng vấn

Không có dữ liệu

Không có dữ liệu

Gợi ý bài viết
Không có dữ liệu

Không có dữ liệu

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào