# 🤖 SevenX Engine - Guia Avançado Android v0.2.9
## 🎯 Features Avançadas
### 1. Sistema de Gestos
```rust
use sevenx_engine::android::*;
let mut android = AdvancedAndroidManager::new();
// Atualizar gestos
android.update();
// Detectar gestos
for gesture in android.gestures.get_gestures() {
match gesture.gesture_type {
GestureType::Tap => {
println!("Tap at ({}, {})", gesture.position.0, gesture.position.1);
}
GestureType::DoubleTap => {
println!("Double Tap!");
// Abrir menu, por exemplo
}
GestureType::LongPress => {
println!("Long Press!");
// Mostrar opções contextuais
}
GestureType::Swipe(direction) => {
match direction {
SwipeDirection::Up => println!("Swipe Up"),
SwipeDirection::Down => println!("Swipe Down"),
SwipeDirection::Left => println!("Swipe Left"),
SwipeDirection::Right => println!("Swipe Right"),
}
}
GestureType::Pinch(pinch_type) => {
match pinch_type {
PinchType::In => {
// Zoom out
camera_zoom *= 0.95;
}
PinchType::Out => {
// Zoom in
camera_zoom *= 1.05;
}
}
}
GestureType::Rotate => {
// Rotacionar objeto
object_rotation += gesture.angle;
}
}
}
```
**Configuração de Gestos:**
```rust
// Personalizar thresholds
android.gestures.tap_threshold = 30.0; // pixels
android.gestures.swipe_threshold = 100.0; // pixels
android.gestures.long_press_duration = Duration::from_millis(800);
```
---
### 2. Orientação de Tela
```rust
// Obter orientação atual
let orientation = android.orientation.get_orientation();
match orientation {
ScreenOrientation::Portrait => println!("Portrait"),
ScreenOrientation::LandscapeLeft => println!("Landscape Left"),
ScreenOrientation::LandscapeRight => println!("Landscape Right"),
ScreenOrientation::PortraitUpsideDown => println!("Portrait Upside Down"),
}
// Bloquear orientação
android.orientation.lock(ScreenOrientation::LandscapeLeft);
// Desbloquear
android.orientation.unlock();
// Verificar tipo
if android.orientation.is_landscape() {
// UI para landscape
} else {
// UI para portrait
}
```
---
### 3. Notificações Locais
```rust
// Notificação simples
let id = android.notifications.show(
"Título",
"Mensagem da notificação"
);
// Notificação com delay
android.notifications.show_delayed(
"Lembrete",
"Volte a jogar!",
Duration::from_secs(3600) // 1 hora
);
// Cancelar notificação
android.notifications.cancel(id);
// Cancelar todas
android.notifications.cancel_all();
```
**Casos de Uso:**
- ✅ Lembretes de jogo
- ✅ Recompensas diárias
- ✅ Eventos especiais
- ✅ Conquistas desbloqueadas
---
### 4. Conectividade de Rede
```rust
// Verificar conexão
if android.connectivity.is_connected() {
// Fazer download de dados
}
// Tipo de rede
match android.connectivity.get_network_type() {
NetworkType::WiFi => {
// Download de assets grandes
}
NetworkType::Mobile => {
// Usar dados comprimidos
}
NetworkType::None => {
// Modo offline
}
_ => {}
}
// Verificar se é conexão medida
if android.connectivity.is_metered() {
// Reduzir uso de dados
}
```
**Otimizações:**
```rust
// Adaptar qualidade baseado na conexão
if android.connectivity.is_wifi() {
graphics.set_quality(GraphicsQuality::High);
enable_multiplayer();
} else if android.connectivity.is_mobile() {
graphics.set_quality(GraphicsQuality::Medium);
if !android.connectivity.is_metered() {
enable_multiplayer();
}
} else {
graphics.set_quality(GraphicsQuality::Low);
enable_offline_mode();
}
```
---
### 5. Armazenamento Persistente
```rust
// Salvar dados
android.storage.save("player_name", "João");
android.storage.save("high_score", "9999");
android.storage.save("level", "10");
// Carregar dados
if let Some(name) = android.storage.load("player_name") {
println!("Bem-vindo, {}!", name);
}
if let Some(score) = android.storage.load("high_score") {
let high_score: i32 = score.parse().unwrap_or(0);
println!("Recorde: {}", high_score);
}
// Verificar existência
if android.storage.has("save_game") {
// Continuar jogo salvo
} else {
// Novo jogo
}
// Remover dados
android.storage.remove("temp_data");
// Limpar tudo
android.storage.clear();
```
**Dados Recomendados para Salvar:**
- ✅ Progresso do jogador
- ✅ Configurações
- ✅ Recordes
- ✅ Conquistas
- ✅ Preferências de UI
---
### 6. Sistema de Permissões
```rust
// Solicitar permissão
if android.permissions.request(Permission::Storage) {
// Permissão concedida
save_screenshot();
} else {
// Permissão negada
show_error("Permissão necessária");
}
// Verificar permissão
if android.permissions.is_granted(Permission::Camera) {
enable_ar_mode();
}
// Permissões disponíveis
android.permissions.request(Permission::Camera);
android.permissions.request(Permission::Microphone);
android.permissions.request(Permission::Location);
android.permissions.request(Permission::Storage);
android.permissions.request(Permission::Contacts);
android.permissions.request(Permission::Calendar);
```
---
### 7. Teclado Virtual
```rust
// Mostrar teclado
android.keyboard.show();
// Esconder teclado
android.keyboard.hide();
// Verificar visibilidade
if android.keyboard.is_visible() {
// Ajustar UI
}
// Obter texto
let text = android.keyboard.get_text();
// Definir texto
android.keyboard.set_text("Texto inicial".to_string());
// Limpar
android.keyboard.clear();
```
**Exemplo de Input de Nome:**
```rust
let mut entering_name = false;
if button_pressed("Enter Name") {
android.keyboard.show();
entering_name = true;
}
if entering_name {
let name = android.keyboard.get_text();
// Mostrar preview
engine.draw_text(&format!("Nome: {}", name), 100, 100, WHITE);
// Confirmar
if button_pressed("OK") {
android.storage.save("player_name", name);
android.keyboard.hide();
entering_name = false;
}
}
```
---
### 8. Compartilhamento
```rust
// Compartilhar texto
ShareManager::share_text("Acabei de fazer 1000 pontos no SevenX Game!");
// Compartilhar imagem
ShareManager::share_image("/sdcard/screenshot.png");
// Compartilhar arquivo
ShareManager::share_file("/sdcard/replay.dat", "application/octet-stream");
```
**Casos de Uso:**
- ✅ Compartilhar pontuação
- ✅ Compartilhar screenshot
- ✅ Convidar amigos
- ✅ Compartilhar replay
---
## 🎮 Exemplos Práticos
### Jogo com Gestos
```rust
use sevenx_engine::*;
fn main() {
let mut engine = Engine::new(800, 600, "Gesture Game");
let mut android = android::AdvancedAndroidManager::new();
let mut player_x = 400.0;
let mut player_y = 300.0;
let mut player_scale = 1.0;
let mut player_rotation = 0.0;
engine.run(move |engine| {
android.update();
// Gestos
for gesture in android.gestures.get_gestures() {
match gesture.gesture_type {
android::GestureType::Swipe(dir) => {
match dir {
android::SwipeDirection::Up => player_y -= 100.0,
android::SwipeDirection::Down => player_y += 100.0,
android::SwipeDirection::Left => player_x -= 100.0,
android::SwipeDirection::Right => player_x += 100.0,
}
android.vibration.vibrate(50);
}
android::GestureType::Pinch(_) => {
player_scale *= gesture.scale;
}
android::GestureType::Rotate => {
player_rotation += gesture.angle;
}
android::GestureType::DoubleTap => {
// Reset
player_x = 400.0;
player_y = 300.0;
player_scale = 1.0;
player_rotation = 0.0;
}
_ => {}
}
}
// Renderização
engine.clear([0.1, 0.1, 0.15, 1.0]);
let size = (50.0 * player_scale) as u32;
engine.draw_rect(
player_x as i32 - (size / 2) as i32,
player_y as i32 - (size / 2) as i32,
size, size,
[0, 255, 0, 255]
);
true
});
}
```
### Sistema de Save/Load
```rust
use sevenx_engine::*;
struct GameData {
level: i32,
score: i32,
coins: i32,
}
impl GameData {
fn save(&self, android: &mut android::AdvancedAndroidManager) {
android.storage.save("level", &self.level.to_string());
android.storage.save("score", &self.score.to_string());
android.storage.save("coins", &self.coins.to_string());
android.notifications.show(
"Jogo Salvo",
"Seu progresso foi salvo com sucesso!"
);
}
fn load(android: &android::AdvancedAndroidManager) -> Option<Self> {
let level = android.storage.load("level")?.parse().ok()?;
let score = android.storage.load("score")?.parse().ok()?;
let coins = android.storage.load("coins")?.parse().ok()?;
Some(Self { level, score, coins })
}
}
fn main() {
let mut engine = Engine::new(800, 600, "Save System");
let mut android = android::AdvancedAndroidManager::new();
// Tentar carregar save
let mut game_data = GameData::load(&android).unwrap_or(GameData {
level: 1,
score: 0,
coins: 0,
});
engine.run(move |engine| {
android.update();
// Salvar com gesto
if android.gestures.has_gesture(android::GestureType::LongPress) {
game_data.save(&mut android);
}
// Renderização
engine.clear([0.1, 0.1, 0.15, 1.0]);
engine.draw_text(
&format!("Level: {}", game_data.level),
10, 10, [255, 255, 255, 255]
);
engine.draw_text(
&format!("Score: {}", game_data.score),
10, 30, [255, 255, 255, 255]
);
engine.draw_text(
&format!("Coins: {}", game_data.coins),
10, 50, [255, 255, 255, 255]
);
engine.draw_text(
"Long Press to Save",
10, 100, [200, 200, 200, 255]
);
true
});
}
```
---
## 📊 Comparação: AndroidManager vs AdvancedAndroidManager
| Touch Input | ✅ | ✅ |
| Joystick Virtual | ✅ | ✅ |
| Sensores | ✅ | ✅ |
| Vibração | ✅ | ✅ |
| Performance | ✅ | ✅ |
| **Gestos** | ❌ | ✅ |
| **Orientação** | ❌ | ✅ |
| **Notificações** | ❌ | ✅ |
| **Conectividade** | ❌ | ✅ |
| **Storage** | ❌ | ✅ |
| **Permissões** | ❌ | ✅ |
| **Teclado** | ❌ | ✅ |
---
## 🎯 Boas Práticas
### 1. Gestos
```rust
// ✅ BOM: Feedback imediato
if android.gestures.has_gesture(GestureType::Tap) {
android.vibration.vibrate(30);
play_sound("tap.wav");
}
// ❌ RUIM: Sem feedback
if android.gestures.has_gesture(GestureType::Tap) {
// Nada acontece visualmente
}
```
### 2. Orientação
```rust
// ✅ BOM: Adaptar UI
if android.orientation.is_landscape() {
joystick_x = 100.0;
buttons_x = 700.0;
} else {
joystick_x = 80.0;
buttons_x = 400.0;
}
// ❌ RUIM: UI fixa
// Elementos podem ficar fora da tela
```
### 3. Conectividade
```rust
// ✅ BOM: Verificar antes de baixar
if android.connectivity.is_wifi() {
download_large_assets();
} else {
show_message("Conecte-se ao WiFi para baixar");
}
// ❌ RUIM: Baixar sem verificar
// Pode gastar dados móveis do usuário
```
### 4. Storage
```rust
// ✅ BOM: Salvar regularmente
if game_state_changed {
game_data.save(&mut android);
}
// ❌ RUIM: Salvar apenas ao fechar
// Pode perder progresso se o app crashar
```
---
## 🐛 Troubleshooting
### Gestos não detectados
```rust
// Certifique-se de chamar update()
android.update();
// Ajustar thresholds
android.gestures.tap_threshold = 30.0;
android.gestures.swipe_threshold = 80.0;
```
### Notificações não aparecem
```bash
# Adicionar permissão no AndroidManifest.xml
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
```
### Storage não persiste
```rust
// Verificar se está salvando corretamente
android.storage.save("key", "value");
// Verificar se está carregando
if let Some(value) = android.storage.load("key") {
println!("Loaded: {}", value);
}
```
---
## 📚 Recursos Adicionais
- `examples/android_advanced_demo.rs` - Demo completa
- `ANDROID_FEATURES_0.2.9.md` - Features básicas
- `ANDROID_QUICK_START.md` - Início rápido
---
**SevenX Engine v0.2.9** - Android avançado! 🤖🎮✨