inappwebview shutdown trying to access files on device only on android
- [x] I have read the Getting Started section
- [x] I have already searched for the same problem
Environment
| Technology | Version |
|---|---|
| Flutter version | 3.3.7 |
| Plugin version | 5.7.1 |
| Android version | 12 and 7.0 |
Device information:
Description
Expected behavior:
Current behavior:
Steps to reproduce
- This
- Than that
- Then
Images
Stacktrace/Logcat
đź‘‹ @wanoghoco
NOTE: This comment is auto-generated.
Are you sure you have already searched for the same problem?
Some people open new issues but they didn't search for something similar or for the same issue. Please, search for it using the GitHub issue search box or on the official inappwebview.dev website, or, also, using Google, StackOverflow, etc. before posting a new one. You may already find an answer to your problem!
If this is really a new issue, then thank you for raising it. I will investigate it and get back to you as soon as possible. Please, make sure you have given me as much context as possible! Also, if you didn't already, post a code example that can replicate this issue.
In the meantime, you can already search for some possible solutions online! Because this plugin uses native WebView, you can search online for the same issue adding android WebView [MY ERROR HERE] or ios WKWebView [MY ERROR HERE] keywords.
Following these steps can save you, me, and other people a lot of time, thanks!
I had the same problem and solved it
in manifest add
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
and before activity tag add
<provider
android:name="com.pichillilorenzo.flutter_inappwebview.InAppWebViewFileProvider"
android:authorities="${applicationId}.flutter_inappwebview.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
add inside application tag
android:requestLegacyExternalStorage="true"
finally in the widget add
InAppWebView(
androidOnPermissionRequest: (_, __, resources) async {
return PermissionRequestResponse(
resources: resources,
action: PermissionRequestResponseAction.GRANT,
);
},
...
remove the app and then
flutter clean
flutter pub get
flutter run
I had the same problem and solved it
in manifest add
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />and before activity tag add
<provider android:name="com.pichillilorenzo.flutter_inappwebview.InAppWebViewFileProvider" android:authorities="${applicationId}.flutter_inappwebview.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> </provider>add inside application tag
android:requestLegacyExternalStorage="true"finally in the widget add
InAppWebView( androidOnPermissionRequest: (_, __, resources) async { return PermissionRequestResponse( resources: resources, action: PermissionRequestResponseAction.GRANT, ); }, ...remove the app and then
flutter clean flutter pub get flutter run
You saved my day, thanks.
Update on this ticket : Using the latest version 6.0.0, I have now to remove this patch in the manifest to have it working again.
Hi everyone,
I'm experiencing a similar issue using flutter_inappwebview version 6.1.4. Below is my manifest configuration:
In /android/app/src/profile/AndroidManifest.xml
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
In /android/app/src/main/AndroidManifest.xml
<application
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true">
<provider
android:name="com.pichillilorenzo.flutter_inappwebview_android.InAppWebViewFileProvider"
android:authorities="${applicationId}.flutter_inappwebview_android.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
</application>
In /android/app/src/main/res/xml/provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="." />
<external-files-path name="images" path="Pictures/" />
</paths>
In /android/app/src/main/res/xml/file_paths.xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="images" path="Pictures/" />
</paths>
Everything works as expected on newer Android versions (e.g., Android 14), but on another device with Android 11 I am unable to upload images—whether from the gallery or directly from the camera, I can select them from the gallery or take a photo but after validation I go nothing left (no file name) in the file field. (The permission requests work fine) and for Android 11 I get both permission windows, one for file access and one for the phone's camera.
Future<void> requestPermissions() async {
Map<Permission, PermissionStatus> statuses = await [
Permission.camera,
Permission.storage,
].request();
if (statuses[Permission.camera] != PermissionStatus.granted ||
statuses[Permission.storage] != PermissionStatus.granted) {
throw Exception('Permissions not granted');
}
}
// Calling this function before using InAppWebView
await requestPermissions();
Any help or suggestions to resolve this issue would be greatly appreciated.
Thanks in advance!