Explorando a API de Vibração do Celular com React Native 📳
Olá, desenvolvedores!
Hoje vamos explorar uma API nativa muito interessante e útil para melhorar a experiência do usuário em nossos aplicativos: a API de Vibração. Usar o feedback tátil (a vibração) pode fornecer confirmações importantes para o usuário, criar alertas ou simplesmente adicionar uma camada de interatividade ao seu app.
O código que analisaremos hoje cria uma interface simples para testar as diferentes funcionalidades da API Vibration
do React Native, demonstrando como acionar vibrações simples, longas, com padrões personalizados e como adaptamos o código para funcionar de maneira diferente no Android e no iOS.
Visão Geral do Aplicativo
Este aplicativo é uma “bancada de testes” para a API de vibração. Ele apresenta uma série de botões, cada um acionando um tipo diferente de vibração:
- Vibrar uma vez: Uma vibração curta e padrão.
- Vibrar por 10 segundos: Uma vibração contínua com duração definida (disponível apenas no Android).
- Vibrar com padrão: Vibra seguindo um padrão de pausas e vibrações.
- Vibrar com padrão repetido: Inicia o padrão de vibração em um loop infinito.
- Parar vibração: Interrompe qualquer vibração que esteja em andamento.
Analisando os Componentes e a Lógica
Vamos quebrar o código para entender como cada parte funciona.
Componente Separador
e a API Platform
JavaScript
import { Platform, View, StyleSheet } from 'react-native';
const Separador = () => {
return <View style={Platform.OS === 'android' ? estilos.separador : null} />;
};
Antes de entrar no app principal, temos este pequeno componente auxiliar. Sua única função é renderizar uma linha cinza para separar os botões.
A parte mais importante aqui é o uso da API Platform
. Com Platform.OS
, podemos verificar qual o sistema operacional ('android'
ou 'ios'
) em que o app está rodando. Neste caso, o separador só é estilizado e exibido no Android, demonstrando uma forma simples de criar lógicas ou estilos específicos para cada plataforma.
O Componente Principal App
Constantes e Configurações
JavaScript
const UM_SEGUNDO_EM_MS = 1000;
const PADRAO_VIBRACAO = [
1 * UM_SEGUNDO_EM_MS, // Pausa por 1s
2 * UM_SEGUNDO_EM_MS, // Vibra por 2s
3 * UM_SEGUNDO_EM_MS, // Pausa por 3s
];
No início do componente, definimos constantes para tornar o código mais legível.
UM_SEGUNDO_EM_MS
: Simplesmente para evitar o uso de “números mágicos” (como 1000) no código.PADRAO_VIBRACAO
: Este é o coração da vibração customizada. É um array de números que representa um padrão de[pausa, vibração, pausa, vibração, ...]
, onde os valores são em milissegundos. No Android, o padrão começa com uma pausa. No iOS, ele começa com uma vibração.
Funções da API Vibration
A interface do nosso app é composta por botões, cada um chamando um método diferente do objeto Vibration
:
- Vibração Simples JavaScript
<Button title="Vibrar uma vez" onPress={() => Vibration.vibrate()} />
ChamarVibration.vibrate()
sem argumentos aciona uma vibração curta e padrão do sistema. É a forma mais simples de usar a API. - Vibração com Duração (Apenas Android) JavaScript
{Platform.OS === 'android' ? ( <Button title="Vibrar por 10 segundos" onPress={() => Vibration.vibrate(10 * UM_SEGUNDO_EM_MS)} /> ) : null}
Aqui vemos oPlatform.OS
em ação novamente. Este botão só será renderizado se o sistema operacional for Android. Isso ocorre porque o métodovibrate
com um único argumento numérico para duração só funciona no Android. No iOS, passar um número não tem efeito. - Vibração com Padrão JavaScript
<Button title="Vibrar com padrão" onPress={() => Vibration.vibrate(PADRAO_VIBRACAO)} />
Passando um array (nossoPADRAO_VIBRACAO
) para o métodovibrate
, criamos uma sequência customizada. O aparelho irá seguir os tempos de pausa e vibração definidos no array. - Vibração com Padrão em Loop JavaScript
<Button title="Vibrar com padrão repetido" onPress={() => Vibration.vibrate(PADRAO_VIBRACAO, true)} />
Este método aceita um segundo argumento booleano. Se fortrue
, o padrão de vibração será repetido continuamente até que seja cancelado. - Cancelar Vibração JavaScript
<Button title="Parar vibração" onPress={() => Vibration.cancel()} color="#FF0000" />
O métodoVibration.cancel()
interrompe imediatamente qualquer vibração que esteja em andamento. É essencial para dar ao usuário o controle de parar uma vibração em loop.
Estilização com StyleSheet
JavaScript
const estilos = StyleSheet.create({
// ...
});
Como nos exemplos anteriores, o StyleSheet.create
é usado para definir a aparência dos componentes. Ele centraliza os estilos em um único lugar e os otimiza para a plataforma.
Código Completo
import React from 'react';
import {
Button,
Platform,
Text,
Vibration,
View,
SafeAreaView,
StyleSheet,
} from 'react-native';
const Separador = () => {
return <View style={Platform.OS === 'android' ? estilos.separador : null} />;
};
const App = () => {
const UM_SEGUNDO_EM_MS = 1000;
const PADRAO_VIBRACAO = [
1 * UM_SEGUNDO_EM_MS,
2 * UM_SEGUNDO_EM_MS,
3 * UM_SEGUNDO_EM_MS,
];
const DESCRICAO_PADRAO =
Platform.OS === 'android'
? 'espera 1s, vibra 2s, espera 3s'
: 'espera 1s, vibra, espera 2s, vibra, espera 3s';
return (
<SafeAreaView style={estilos.container}>
<Text style={[estilos.cabecalho, estilos.paragrafo]}>API de Notificação por Vibração</Text>
<View>
<Button title="Vibrar uma vez" onPress={() => Vibration.vibrate()} />
</View>
<Separador />
{/* Botão de vibração longa - disponível apenas no Android */}
{Platform.OS === 'android'
? [
<View key="vibracao-longa">
<Button
title="Vibrar por 10 segundos"
onPress={() => Vibration.vibrate(10 * UM_SEGUNDO_EM_MS)}
/>
</View>,
<Separador key="separador-vibracao-longa" />,
]
: null}
<Text style={estilos.paragrafo}>Padrão: {DESCRICAO_PADRAO}</Text>
<Button
title="Vibrar com padrão"
onPress={() => Vibration.vibrate(PADRAO_VIBRACAO)}
/>
<Separador />
<Button
title="Vibrar com padrão repetido"
onPress={() => Vibration.vibrate(PADRAO_VIBRACAO, true)}
/>
<Separador />
<Button
title="Parar vibração"
onPress={() => Vibration.cancel()}
color="#FF0000"
/>
</SafeAreaView>
);
};
const estilos = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
paddingTop: 44,
padding: 8,
},
cabecalho: {
fontSize: 18,
fontWeight: 'bold',
textAlign: 'center',
},
paragrafo: {
margin: 24,
textAlign: 'center',
},
separador: {
marginVertical: 8,
borderBottomColor: '#737373',
borderBottomWidth: StyleSheet.hairlineWidth,
},
});
export default App;
Conclusão
Este exemplo prático é uma excelente demonstração de como interagir com as APIs nativas do dispositivo através do React Native. Os principais aprendizados aqui são:
- Uso da API
Vibration
: Aprendemos a executar diferentes tipos de feedback tátil, desde uma simples vibração até padrões complexos e repetitivos. - Desenvolvimento Multiplataforma: Vimos como a API
Platform
é crucial para lidar com as diferenças de comportamento e funcionalidade entre Android e iOS. - Controle do Usuário: A importância de fornecer um método para cancelar ações contínuas, como uma vibração em loop, através do
Vibration.cancel()
.
Com esse conhecimento, vocês podem agora adicionar um feedback tátil rico e significativo aos seus aplicativos, melhorando a usabilidade e o engajamento do usuário.
Share this content:
Publicar comentário