Bugfix (Android14): for recording Location/GPS and Nearby Devices/Bluetooth are mandatory due to Android.

Fixes #1749.
This commit is contained in:
Dennis Guse
2023-10-29 08:46:27 +01:00
parent c510bb66b2
commit cb48d7f706
4 changed files with 22 additions and 5 deletions
@@ -212,7 +212,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co
}
private void requestRequiredPermissions() {
PermissionRequester.ALL.requestPermissionsIfNeeded(this, this, null, (requester) -> Toast.makeText(this, R.string.permission_gps_failed, Toast.LENGTH_LONG).show());
PermissionRequester.ALL.requestPermissionsIfNeeded(this, this, null, (requester) -> Toast.makeText(this, R.string.permission_recording_failed, Toast.LENGTH_LONG).show());
}
@Override
@@ -26,6 +26,7 @@ import android.os.Looper;
import android.os.PowerManager.WakeLock;
import android.util.Log;
import android.util.Pair;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
@@ -36,6 +37,7 @@ import java.io.PrintWriter;
import java.io.StringWriter;
import java.time.Duration;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.data.models.Distance;
import de.dennisguse.opentracks.data.models.Marker;
import de.dennisguse.opentracks.data.models.Track;
@@ -45,6 +47,7 @@ import de.dennisguse.opentracks.services.announcement.VoiceAnnouncementManager;
import de.dennisguse.opentracks.services.handlers.GpsStatusValue;
import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
import de.dennisguse.opentracks.settings.PreferencesUtils;
import de.dennisguse.opentracks.util.PermissionRequester;
import de.dennisguse.opentracks.util.SystemUtils;
public class TrackRecordingService extends Service implements TrackPointCreator.Callback, SharedPreferences.OnSharedPreferenceChangeListener, TrackRecordingManager.IdleObserver {
@@ -199,6 +202,14 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
wakeLock = SystemUtils.acquireWakeLock(this, wakeLock);
trackPointCreator.start(this, handler);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
if (!PermissionRequester.RECORDING.hasPermission(this)) {
Toast.makeText(this, R.string.permission_recording_failed, Toast.LENGTH_LONG).show();
return;
}
}
startForeground(TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.setGPSonlyStarted(this), ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION + ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE);
} else {
startForeground(TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.setGPSonlyStarted(this));
@@ -89,13 +89,17 @@ public class PermissionRequester {
}
private static final List<String> ALL_PERMISSIONS;
private static final List<String> RECORDING_PERMISSIONS;
static {
ArrayList<String> all = new ArrayList<>(GPS_PERMISSION);
all.addAll(BLUETOOTH_PERMISSIONS);
all.addAll(NOTIFICATION_PERMISSIONS);
ArrayList<String> recording = new ArrayList<>(GPS_PERMISSION);
recording.addAll(BLUETOOTH_PERMISSIONS);
ALL_PERMISSIONS = Collections.unmodifiableList(all);
RECORDING_PERMISSIONS = Collections.unmodifiableList(recording);
recording.addAll(NOTIFICATION_PERMISSIONS);
ALL_PERMISSIONS = Collections.unmodifiableList(recording);
}
public final static PermissionRequester GPS = new PermissionRequester(GPS_PERMISSION);
@@ -103,6 +107,7 @@ public class PermissionRequester {
public final static PermissionRequester NOTIFICATION = new PermissionRequester(NOTIFICATION_PERMISSIONS);
public final static PermissionRequester ALL = new PermissionRequester(ALL_PERMISSIONS);
public final static PermissionRequester RECORDING = new PermissionRequester(RECORDING_PERMISSIONS);
public interface RejectedCallback {
void rejected(PermissionRequester permissionRequester);
+1
View File
@@ -317,6 +317,7 @@ limitations under the License.
<string name="recording_service">Recording service</string>
<!-- Permission -->
<string name="permission_gps_failed">OpenTracks requires permission to use GPS.</string>
<string name="permission_recording_failed">OpenTracks requires permission to access your location as well as nearby devices.</string>
<string name="permission_bluetooth_failed">OpenTracks requires permission to use Bluetooth.</string>
<string name="permission_bluetooth_failed_rejected">You manually need to grant OpenTracks access to Nearby Devices in system settings.</string>
<!-- Search -->