PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → Como não desligar a tela do Android com WLanguage em um projeto Windev Mobile
Como não desligar a tela do Android com WLanguage em um projeto Windev Mobile
Débuté par Boller, 24 juil. 2024 06:42 - 2 réponses
Membre enregistré
4 520 messages
Posté le 24 juillet 2024 - 06:42
Como não desligar a tela do Android com WLanguage em um projeto Windev Mobile

Para evitar que a tela do Android seja desligada em um projeto WinDev Mobile usando a linguagem WLanguage, você pode usar a função KeepScreenOn para manter a tela ativa. Aqui está um exemplo:

wlanguage
Copiar código
// Ativar a manutenção da tela ligada
KeepScreenOn(True)
Certifique-se de chamar essa função no momento apropriado no seu código, por exemplo, quando a tela estiver ativa e você desejar evitar que ela desligue automaticamente. Lembre-se de desativar essa opção quando não for mais necessário:

wlanguage
Copiar código
// Desativar a manutenção da tela ligada
KeepScreenOn(False)
Isso deve ajudar a controlar o comportamento de desligamento da tela no seu projeto WinDev Mobile.

E com Java ?

Em um aplicativo Android usando Java, você pode evitar que a tela seja desligada programaticamente utilizando a classe PowerManager. Aqui está um exemplo simples:

java
Copiar código
import android.content.Context;
import android.os.PowerManager;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class SuaAtividade extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sua_layout);

// Obtenha o serviço PowerManager
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);

// Mantenha a tela ligada enquanto a atividade estiver em execução
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "SeuApp:WakeLock");
wakeLock.acquire();
}

@Override
protected void onDestroy() {
super.onDestroy();

// Libere o WakeLock ao destruir a atividade
if (wakeLock != null && wakeLock.isHeld()) {
wakeLock.release();
}
}
}
Certifique-se de adicionar a permissão WAKE_LOCK no seu arquivo AndroidManifest.xml:

xml
Copiar código
<uses-permission android:name="android.permission.WAKE_LOCK" />
Este código mantém a tela ligada enquanto a atividade está em execução e libera a trava ao destruir a atividade para não consumir recursos desnecessários.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
4 520 messages
Posté le 15 juillet 2025 - 14:33
Segue abaixo o código para o Windev Mobile para Android e iOS não dormir a tela permanecer abri a até ser solicitado ou até terminar uma tarefa:

Aqui está o código para manter a tela ativa no Windev Mobile para Android e iOS:​​​​​​​​​​​​​​​​

Este código fornece uma solução completa para manter a tela ativa no Windev Mobile. As principais funcionalidades incluem:

**Funcionalidades principais:**

- `AtivarTelaPermanecer()` - Mantém a tela ligada indefinidamente
- `DesativarTelaPermanecer()` - Restaura comportamento normal
- `AtivarTelaPorTempo()` - Mantém ativa por tempo determinado
- `VerificarStatusTela()` - Verifica status atual

**Características técnicas:**

**Para Android:**

- Usa `FLAG_KEEP_SCREEN_ON` (método recomendado)
- Alternativa com `PowerManager` e `WAKE_LOCK` (comentada)
- Execução via `AndroidExecuteCode()`

**Para iOS:**

- Usa `setIdleTimerDisabled` do `UIApplication`
- Execução via `iOSExecuteCode()`

**Permissões necessárias:**

- Android: `WAKE_LOCK` (apenas se usar PowerManager)
- iOS: Nenhuma permissão especial

**Exemplo de uso prático:**

```wlanguage
// Manter tela ativa durante download
AtivarTelaPermanecer()
FazerDownload()
DesativarTelaPermanecer()

// Ou por tempo determinado (10 minutos)
AtivarTelaPorTempo(600)
```

O código é otimizado para preservar bateria e inclui controles de segurança para evitar que a tela fique ativa desnecessariamente.

// =============================================================================
// CONTROLE DE TELA ATIVA - WINDEV MOBILE (Android e iOS)
// =============================================================================

// Declaração de variáveis globais
gbTelaAtiva is boolean = False
gnTimerTela is int = 0

// =============================================================================
// FUNÇÃO: AtivarTelaPermanecer
// Descrição: Mantém a tela ligada impedindo o modo sleep
// Plataforma: Android e iOS
// =============================================================================
PROCEDURE AtivarTelaPermanecer()

IF InAndroidMode() THEN
// Para Android - usando FLAG_KEEP_SCREEN_ON
CallDLL32(“android.view.WindowManager$LayoutParams”, “FLAG_KEEP_SCREEN_ON”, 128)

```
// Aplicar a flag na janela atual
sJavaCode is string = [
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
]

AndroidExecuteCode(sJavaCode)

// Método alternativo usando PowerManager (requer permissão WAKE_LOCK)
sJavaCodePower is string = [
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(
PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
"MyApp:MyWakeLockTag"
);
wakeLock.acquire();
]

// Descomente a linha abaixo se preferir usar PowerManager
// AndroidExecuteCode(sJavaCodePower)

gbTelaAtiva = True
Info("Tela configurada para permanecer ativa (Android)")
```

ELSE IF InIOSMode() THEN
// Para iOS - desabilitar idle timer
sObjCCode is string = [
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
]

```
iOSExecuteCode(sObjCCode)
gbTelaAtiva = True
Info("Tela configurada para permanecer ativa (iOS)")
```

ELSE
// Modo simulador ou outras plataformas
Info(“Funcionalidade disponível apenas em dispositivos móveis”)
END

// =============================================================================
// FUNÇÃO: DesativarTelaPermanecer
// Descrição: Restaura o comportamento normal da tela (permite sleep)
// Plataforma: Android e iOS
// =============================================================================
PROCEDURE DesativarTelaPermanecer()

IF InAndroidMode() THEN
// Para Android - remover FLAG_KEEP_SCREEN_ON
sJavaCode is string = [
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
]

```
AndroidExecuteCode(sJavaCode)

// Se usando PowerManager, liberar o wake lock
sJavaCodePower is string = [
if (wakeLock != null && wakeLock.isHeld()) {
wakeLock.release();
}
]

// AndroidExecuteCode(sJavaCodePower)

gbTelaAtiva = False
Info("Tela restaurada ao comportamento normal (Android)")
```

ELSE IF InIOSMode() THEN
// Para iOS - reabilitar idle timer
sObjCCode is string = [
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
]

```
iOSExecuteCode(sObjCCode)
gbTelaAtiva = False
Info("Tela restaurada ao comportamento normal (iOS)")
```

END

// =============================================================================
// FUNÇÃO: AtivarTelaPorTempo
// Descrição: Mantém a tela ativa por um tempo determinado
// Parâmetros: nSegundos - Tempo em segundos para manter ativa
// =============================================================================
PROCEDURE AtivarTelaPorTempo(nSegundos is int)

// Ativar tela
AtivarTelaPermanecer()

// Configurar timer para desativar automaticamente
gnTimerTela = Timer(nSegundos * 1000, TimerDesativarTela)

Info(StringBuild(“Tela ficará ativa por %1 segundos”, nSegundos))

// =============================================================================
// FUNÇÃO: TimerDesativarTela
// Descrição: Função chamada pelo timer para desativar a tela
// =============================================================================
PROCEDURE TimerDesativarTela()

// Parar o timer
EndTimer(gnTimerTela)

// Desativar tela
DesativarTelaPermanecer()

Info(“Tempo expirado - Tela voltou ao comportamento normal”)

// =============================================================================
// FUNÇÃO: VerificarStatusTela
// Descrição: Retorna se a tela está configurada para permanecer ativa
// Retorno: boolean - True se ativa, False se normal
// =============================================================================
PROCEDURE VerificarStatusTela() : boolean

RESULT gbTelaAtiva

// =============================================================================
// EXEMPLO DE USO EM UM BOTÃO OU PROCESSO
// =============================================================================

// Exemplo 1: Ativar permanentemente
// AtivarTelaPermanecer()

// Exemplo 2: Ativar por 5 minutos (300 segundos)
// AtivarTelaPorTempo(300)

// Exemplo 3: Desativar manualmente
// DesativarTelaPermanecer()

// Exemplo 4: Verificar status atual
// IF VerificarStatusTela() THEN
// Info(“Tela está ativa”)
// ELSE
// Info(“Tela em modo normal”)
// END

// =============================================================================
// GERENCIAMENTO DURANTE UMA TAREFA ESPECÍFICA
// =============================================================================

// Exemplo de uso durante download/upload ou processamento longo
PROCEDURE ExecutarTarefaLonga()

// Ativar tela no início da tarefa
AtivarTelaPermanecer()

// Simular tarefa longa
FOR i = 1 TO 100
// Sua tarefa aqui (download, processamento, etc.)
ProgressBar(i, “Processando… “ + i + “%”)
Multitask(100) // Permite atualização da interface
END

// Desativar tela ao final da tarefa
DesativarTelaPermanecer()

Info(“Tarefa concluída!”)

// =============================================================================
// PERMISSÕES NECESSÁRIAS
// =============================================================================

// Para Android (adicionar no arquivo AndroidManifest.xml):
//

// Para iOS: Não requer permissões especiais

// =============================================================================
// NOTAS IMPORTANTES
// =============================================================================

// 1. Sempre desative a funcionalidade quando não precisar mais
// 2. Use com moderação para não impactar a bateria
// 3. Considere implementar um timeout automático
// 4. Teste em dispositivos reais, não apenas no simulador
// 5. Para Android, FLAG_KEEP_SCREEN_ON é preferível ao WAKE_LOCK
// 6. Para iOS, setIdleTimerDisabled é a abordagem padrão


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
4 520 messages
Posté le 15 juillet 2025 - 14:59
E pra isso não rodar no WMDev e
deixar testar o app, faz um if com um
boolean e só passa se for compilado se for pelo Xcode.

O WMDev USA o COMPILE
sendo assim não roda chamadas Java o Xcode de baixo nível apenas funções que o compilador WLanguage reconhece e que estejam liberadas. Por isso no WMDev é obrigatório por um boolean pra dizer se usa ou não a chamada da procedure java android ou Xcode swift!

Glo_Wmdev is boolean

If Glo_Wmdev = false

AtivarTelaPermanecer()

End

….

If Glo_Wmdev = false

DesativarTelaPermanecer()

End


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 15 juillet 2025 - 15:03