diff --git a/app/src/main/java/org/briarproject/hotspot/HotspotManager.java b/app/src/main/java/org/briarproject/hotspot/HotspotManager.java
index b59214f721096c01e2d2d2802cd8f46fe54d3176..44bcf54e0d59e86713378fd19ef2ef5a466bd3cd 100644
--- a/app/src/main/java/org/briarproject/hotspot/HotspotManager.java
+++ b/app/src/main/java/org/briarproject/hotspot/HotspotManager.java
@@ -1,12 +1,17 @@
 package org.briarproject.hotspot;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.net.wifi.WifiManager;
+import android.net.wifi.WifiManager.WifiLock;
 import android.net.wifi.p2p.WifiP2pConfig;
 import android.net.wifi.p2p.WifiP2pGroup;
 import android.net.wifi.p2p.WifiP2pManager;
 import android.net.wifi.p2p.WifiP2pManager.ActionListener;
+import android.net.wifi.p2p.WifiP2pManager.Channel;
 import android.os.Handler;
+import android.os.PowerManager;
+import android.os.PowerManager.WakeLock;
 
 import org.briarproject.hotspot.HotspotState.NetworkConfig;
 
@@ -16,6 +21,7 @@ import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.UiThread;
 
+import static android.content.Context.POWER_SERVICE;
 import static android.content.Context.WIFI_P2P_SERVICE;
 import static android.content.Context.WIFI_SERVICE;
 import static android.net.wifi.WifiManager.WIFI_MODE_FULL;
@@ -26,6 +32,7 @@ import static android.net.wifi.p2p.WifiP2pManager.ERROR;
 import static android.net.wifi.p2p.WifiP2pManager.NO_SERVICE_REQUESTS;
 import static android.net.wifi.p2p.WifiP2pManager.P2P_UNSUPPORTED;
 import static android.os.Build.VERSION.SDK_INT;
+import static android.os.PowerManager.FULL_WAKE_LOCK;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Logger.getLogger;
 import static org.briarproject.hotspot.StringUtils.getRandomString;
@@ -58,6 +65,7 @@ class HotspotManager {
 	private final HotspotListener listener;
 	private final WifiManager wifiManager;
 	private final WifiP2pManager wifiP2pManager;
+	private final PowerManager powerManager;
 	private final Handler handler;
 	private final String lockTag;
 
@@ -65,8 +73,9 @@ class HotspotManager {
 	// on API < 29 this is null because we cannot request a custom network name
 	private String networkName = null;
 
-	private WifiManager.WifiLock wifiLock;
-	private WifiP2pManager.Channel channel;
+	private WifiLock wifiLock;
+	private WakeLock wakeLock;
+	private Channel channel;
 
 	HotspotManager(Context ctx, HotspotListener listener) {
 		this.ctx = ctx;
@@ -75,6 +84,7 @@ class HotspotManager {
 				.getSystemService(WIFI_SERVICE);
 		wifiP2pManager =
 				(WifiP2pManager) ctx.getSystemService(WIFI_P2P_SERVICE);
+		powerManager = (PowerManager) ctx.getSystemService(POWER_SERVICE);
 		handler = new Handler(ctx.getMainLooper());
 		lockTag = ctx.getPackageName() + ":app-sharing-hotspot";
 	}
@@ -86,7 +96,7 @@ class HotspotManager {
 			return;
 		}
 		listener.onStartingHotspot();
-		acquireLock();
+		acquireLocks();
 		startWifiP2pFramework(1);
 	}
 
@@ -218,12 +228,16 @@ class HotspotManager {
 		});
 	}
 
-	private void acquireLock() {
+	@SuppressLint("WakelockTimeout")
+	private void acquireLocks() {
 		// WIFI_MODE_FULL has no effect on API >= 29
 		int lockType =
 				SDK_INT >= 29 ? WIFI_MODE_FULL_HIGH_PERF : WIFI_MODE_FULL;
 		wifiLock = wifiManager.createWifiLock(lockType, lockTag);
 		wifiLock.acquire();
+		// FLAG_KEEP_SCREEN_ON is not respected on some Huawei devices.
+		wakeLock = powerManager.newWakeLock(FULL_WAKE_LOCK, lockTag);
+		wakeLock.acquire();
 	}
 
 	private void releaseHotspot() {
@@ -240,6 +254,7 @@ class HotspotManager {
 		if (SDK_INT >= 27) channel.close();
 		channel = null;
 		wifiLock.release();
+		wakeLock.release();
 	}
 
 	private void requestGroupInfo(int attempt) {