Improve detection of sdcard write access
This allows reading waypoints from apps on till devices running API 28 if they store their files in a accessible path (not Android/data). It even works for devices running API 30 if they installed it as an update.
This commit is contained in:
parent
12148f6a5d
commit
dc95984199
2 changed files with 28 additions and 19 deletions
|
@ -17,13 +17,20 @@ import java.util.List;
|
|||
import java.util.zip.GZIPOutputStream;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.IBinder;
|
||||
import android.os.RemoteException;
|
||||
import android.util.Log;
|
||||
import android.util.Base64;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import btools.router.OsmNodeNamed;
|
||||
|
||||
public class BRouterService extends Service
|
||||
|
@ -203,7 +210,13 @@ public class BRouterService extends Service
|
|||
// add nogos from waypoint database
|
||||
int deviceLevel = android.os.Build.VERSION.SDK_INT;
|
||||
int targetSdkVersion = getApplicationInfo().targetSdkVersion;
|
||||
boolean canAccessSdCard = deviceLevel < 23 || targetSdkVersion == 19;
|
||||
boolean canAccessSdCard = true;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !Environment.isExternalStorageLegacy()) {
|
||||
canAccessSdCard = false;
|
||||
}
|
||||
if (ContextCompat.checkSelfPermission(BRouterService.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
canAccessSdCard = false;
|
||||
}
|
||||
AppLogger.log( "dev/target=" + deviceLevel + "/" + targetSdkVersion + " canAccessSdCard=" + canAccessSdCard );
|
||||
if ( canAccessSdCard )
|
||||
{
|
||||
|
@ -211,18 +224,13 @@ public class BRouterService extends Service
|
|||
worker.nogoList = new ArrayList<OsmNodeNamed>( cor.nogopoints );
|
||||
worker.nogoPolygonsList = new ArrayList<OsmNodeNamed>();
|
||||
}
|
||||
else if (deviceLevel >= android.os.Build.VERSION_CODES.Q) {
|
||||
else {
|
||||
CoordinateReader cor = new CoordinateReaderInternal( baseDir );
|
||||
cor.readFromTo();
|
||||
|
||||
worker.nogoList = new ArrayList<OsmNodeNamed>( cor.nogopoints );
|
||||
worker.nogoPolygonsList = new ArrayList<OsmNodeNamed>();
|
||||
}
|
||||
else
|
||||
{
|
||||
worker.nogoList = new ArrayList<OsmNodeNamed>();
|
||||
worker.nogoPolygonsList = new ArrayList<OsmNodeNamed>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -222,20 +222,21 @@ public class BRouterView extends View
|
|||
waitingForMigration = false;
|
||||
}
|
||||
|
||||
int deviceLevel = android.os.Build.VERSION.SDK_INT;
|
||||
int deviceLevel = Build.VERSION.SDK_INT;
|
||||
int targetSdkVersion = getContext().getApplicationInfo().targetSdkVersion;
|
||||
canAccessSdCard = deviceLevel < 23 || targetSdkVersion == 19;
|
||||
if ( canAccessSdCard )
|
||||
{
|
||||
cor = CoordinateReader.obtainValidReader( basedir, segmentDir );
|
||||
canAccessSdCard = true;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !Environment.isExternalStorageLegacy()) {
|
||||
canAccessSdCard = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (deviceLevel >= android.os.Build.VERSION_CODES.Q) {
|
||||
cor = new CoordinateReaderInternal(basedir);
|
||||
} else {
|
||||
cor = new CoordinateReaderNone();
|
||||
}
|
||||
if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
canAccessSdCard = false;
|
||||
}
|
||||
|
||||
if (canAccessSdCard) {
|
||||
cor = CoordinateReader.obtainValidReader(basedir, segmentDir);
|
||||
}
|
||||
else {
|
||||
cor = new CoordinateReaderInternal(basedir);
|
||||
cor.readFromTo();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue