Hi, I've asked Steve to look into this issue and raised its priority to critical.
On Friday, April 16, 2021 at 12:10:34 AM UTC+3 [email protected] wrote: > Darn it > > Got this message today. This unresolved, high-priority, 8-months-old issue > is finally coming to bite in the ass > https://github.com/codenameone/CodenameOne/issues/3204 > We won't be able to update or publish any existing app that uses the > Gallery on Android unless this is resolved. The workaround proposed by Shai > in the issue is going to be shut down on the 5th of May > > We've detected that your app contains the requestLegacyExternalStorage flag > in the manifest file of one or more of your app bundles or APKs. > > Developers with apps on devices running Android 11+ must use scoped > storage to give users better access control over their device storage. To > release your app on Android 11 or newer after 5 May, you must either: > > - Update your app to use more privacy-friendly best practices, such as > the storage access framework or Media Store API > - Update your app to declare the All files access ( > MANAGE_EXTERNAL_STORAGE) permission in the manifest file, and complete > the All files access permission declaration in Play Console from 5 May > - Remove the All files access permission from your app entirely > > For apps targeting Android 11, the requestLegacyExternalStorage flag will > be ignored. You must use the All files access permission to retain broad > access. > > Apps requesting access to the All files access permission without a > permitted use will be removed from Google Play, and you won't be able to > publish updates. > > I am not 100% sure of what needs fixing in CN1, but I recently had to do > some native android work where I needed to read images from an intent in > the most up-to-date way. The below code allowed me to get these images from > an intent (the code gets images shared into an app with the latest APIs > etc). Just sharing in case it helps > > > Intent intent = getIntent(); > > Uri sharedFileUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); > > if(sharedFileUri != null) > { > FileInputStream input = null; > FileOutputStream output = null; > try > { > //first get filename > String originalFieName = getFileName(sharedFileUri); > String filePath = new File(getCacheDir(), > originalFieName).getAbsolutePath(); > android.os.ParcelFileDescriptor pfd = > getContentResolver().openFileDescriptor(sharedFileUri, "r"); > if(pfd != null) > { > FileDescriptor fd = pfd.getFileDescriptor(); > input = new FileInputStream(fd); > output = new FileOutputStream(filePath); > int read; > byte[] bytes = new byte[4096]; > while ((read = input.read(bytes)) != -1) { > output.write(bytes, 0, read); > } > File sharedFile = new File(filePath); > String finalPath = sharedFile.getPath();//this is the final > image path to be used > } > }catch(Exception ex){} > finally{ > try { > input.close(); > output.close(); > } catch (Exception ignored) {} > } > } > } > > public String getFileName(Uri uri) { > try > { > String result = null; > if (uri.getScheme().equals("content")) { > Cursor cursor = getContentResolver().query(uri, null, null, null, > null); > try { > if (cursor != null && cursor.moveToFirst()) { > result = > cursor.getString(cursor.getColumnIndex(android.provider.OpenableColumns.DISPLAY_NAME)); > } > } finally { > cursor.close(); > } > } > if (result == null) { > result = uri.getPath(); > int cut = result.lastIndexOf('/'); > if (cut != -1) { > result = result.substring(cut + 1); > } > } > return result; > }catch(Exception e) > { > return "temp_file"; > } > } > > -- You received this message because you are subscribed to the Google Groups "CodenameOne Discussions" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/codenameone-discussions/1179bb13-e115-4969-b3f2-400787765742n%40googlegroups.com.
