Flutter - 使用 ACTION_EDIT 意图时出现 PlatformException
Flutter - PlatformException when using an ACTION_EDIT intent
我正在使用 android_intent
包发送 ACTION_EDIT
意图以使图像可编辑,但我一直收到错误消息。
我在网上查了这个问题,发现如果我的 SDK
版本高于或等于 [=17=,我需要创建一个扩展 FileProvider
的 class ] 为了解决这个问题,但我不知道如何在 flutter 中做到这一点。
我用来选择图像并将其发送到 phone 编辑器的函数:
Future getImage() async {
var image = await ImagePicker.pickImage(source: ImageSource.camera);
if (Platform.isAndroid) {
var intent =
AndroidIntent(action: 'action_edit', data: image.uri.toString());
await intent.launch();
}
setState(() {
_image = image;
});
}
我得到的错误:
PlatformException (PlatformException(error, file:///storage/emulated/0/Android/data/com.example.app/files/Pictures/eebbf5f6-0a08-462b-9564-63c1a226e6a24636306815702344465.jpg exposed beyond app through Intent.getData(), null))
I/io.flutter.plugins.androidintent.AndroidIntentPlugin(30575): Sending intent Intent { act=action_edit dat=file:///storage/emulated/0/Android/data/com.example.app/files/Pictures/eebbf5f6-0a08-462b-9564-63c1a226e6a24636306815702344465.jpg }
E/MethodChannel#plugins.flutter.io/android_intent(30575): Failed to handle method call
E/MethodChannel#plugins.flutter.io/android_intent(30575): android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.example.app/files/Pictures/eebbf5f6-0a08-462b-9564-63c1a226e6a24636306815702344465.jpg exposed beyond app through Intent.getData()
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.os.StrictMode.onFileUriExposed(StrictMode.java:1978)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.net.Uri.checkFileUriExposed(Uri.java:2371)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.content.Intent.prepareToLeaveProcess(Intent.java:10936)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.content.Intent.prepareToLeaveProcess(Intent.java:10887)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1667)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.app.Activity.startActivityForResult(Activity.java:4688)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.app.Activity.startActivityForResult(Activity.java:4646)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.app.Activity.startActivity(Activity.java:5007)
你知道如何解决这个问题吗?
我有点解决了这个问题,我将意图包从 android_intent
更改为 intent
然后我以某种方式看到了 ACTION_EDIT
的可用应用程序,但没有在我的 emulator/phone.
这个问题可以用android_intent包解决。
我不知怎么遇到了这个问题,经过搜索和尝试,我是这样解决的:
我使用“android.intent.action.EDIT”代替“action_edit”作为“操作”。
var intent = AndroidIntent(
action: 'android.intent.action.EDIT',
data: image.uri.toString(),
);
我正在使用 android_intent
包发送 ACTION_EDIT
意图以使图像可编辑,但我一直收到错误消息。
我在网上查了这个问题,发现如果我的 SDK
版本高于或等于 [=17=,我需要创建一个扩展 FileProvider
的 class ] 为了解决这个问题,但我不知道如何在 flutter 中做到这一点。
我用来选择图像并将其发送到 phone 编辑器的函数:
Future getImage() async {
var image = await ImagePicker.pickImage(source: ImageSource.camera);
if (Platform.isAndroid) {
var intent =
AndroidIntent(action: 'action_edit', data: image.uri.toString());
await intent.launch();
}
setState(() {
_image = image;
});
}
我得到的错误:
PlatformException (PlatformException(error, file:///storage/emulated/0/Android/data/com.example.app/files/Pictures/eebbf5f6-0a08-462b-9564-63c1a226e6a24636306815702344465.jpg exposed beyond app through Intent.getData(), null))
I/io.flutter.plugins.androidintent.AndroidIntentPlugin(30575): Sending intent Intent { act=action_edit dat=file:///storage/emulated/0/Android/data/com.example.app/files/Pictures/eebbf5f6-0a08-462b-9564-63c1a226e6a24636306815702344465.jpg }
E/MethodChannel#plugins.flutter.io/android_intent(30575): Failed to handle method call
E/MethodChannel#plugins.flutter.io/android_intent(30575): android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.example.app/files/Pictures/eebbf5f6-0a08-462b-9564-63c1a226e6a24636306815702344465.jpg exposed beyond app through Intent.getData()
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.os.StrictMode.onFileUriExposed(StrictMode.java:1978)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.net.Uri.checkFileUriExposed(Uri.java:2371)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.content.Intent.prepareToLeaveProcess(Intent.java:10936)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.content.Intent.prepareToLeaveProcess(Intent.java:10887)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1667)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.app.Activity.startActivityForResult(Activity.java:4688)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.app.Activity.startActivityForResult(Activity.java:4646)
E/MethodChannel#plugins.flutter.io/android_intent(30575): at android.app.Activity.startActivity(Activity.java:5007)
你知道如何解决这个问题吗?
我有点解决了这个问题,我将意图包从 android_intent
更改为 intent
然后我以某种方式看到了 ACTION_EDIT
的可用应用程序,但没有在我的 emulator/phone.
这个问题可以用android_intent包解决。
我不知怎么遇到了这个问题,经过搜索和尝试,我是这样解决的:
我使用“android.intent.action.EDIT”代替“action_edit”作为“操作”。
var intent = AndroidIntent(
action: 'android.intent.action.EDIT',
data: image.uri.toString(),
);