我目前正在使用 Flutter 开发 Android 启动器应用程序,并且正在努力实现一项功能,在按下主页按钮时,系统会提示用户在默认启动器和我的自定义启动器应用程序之间进行选择,并提供“Just一次”或“总是”。
我按照此站点上的说明进行操作,将以下代码添加到 AndroidManifest.xml 中:
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
但是,这并没有产生预期的行为。另外,我尝试在Dart中使用“intent”包,但它似乎与Dart 3不兼容。我使用的代码片段如下:
void displayDefaultLauncherChooser() {
intentFlutter
.Intent()
..setAction(actionFlutter.Action.ACTION_MAIN)
..addCategory("android.intent.category.HOME")
..addCategory("android.intent.category.DEFAULT")
..addFlag(flag.Flag.FLAG_ACTIVITY_NEW_DOCUMENT)
..startActivity()
.catchError((e) => print("intent error: " + e.toString()));
}
我在 Stack Overflow here 上遇到了类似的问题,我在那里获得了上述代码。不幸的是,提供的解决方案对我不起作用。值得注意的是,更新到新版本后,提供的代码中提到的intentFlutter功能不再可用。新发布的intent包是android_intent_plus,但我找不到等效的功能。
任何人都可以澄清此功能已移至何处,或建议使用 android_intent_plus 包在 Android 版 Flutter 中实现启动器选择器对话框的替代方法吗?我们将非常感谢您对正确实施的见解和指导。谢谢!
dependencies:
flutter:
sdk: flutter
url_launcher: ^6.0.6
android_intent: ^2.0.5
Future<void> launchChooserDialog(BuildContext context, String url) async {
if (await canLaunch(url)) {
await launch(url);
} else {
final intent = AndroidIntent(
action: 'action_view',
data: url,
package: 'com.android.chrome', // You can specify a default package
);
await intent.launch();
}
}
RaisedButton(
onPressed: () {
launchChooserDialog(context, 'https://example.com');
},
child: Text('Open URL'),
)