Flutter如何操作安卓已安装应用及跳转谷歌地图携带指定地址
问题1:如何使用Flutter实现对安卓系统中已安装应用的操作?
实现安卓已安装应用的查询、启动等操作可通过device_apps插件完成,操作步骤如下:
- 首先在项目
pubspec.yaml的dependencies节点下添加依赖:
保存后执行dependencies: flutter: sdk: flutter device_apps: ^2.2.0flutter pub get完成依赖安装。 - 常用操作代码示例:
- 查询所有已安装应用:
返回的List<Application> apps = await DeviceApps.getInstalledApplications( includeAppIcons: true, // 配置是否返回应用图标 includeSystemApps: true, // 配置是否返回系统应用 );Application对象包含应用名、包名、安装时间、版本号等信息。 - 判断指定应用是否安装:
// 以谷歌地图包名为例 bool isMapInstalled = await DeviceApps.isAppInstalled('com.google.android.apps.maps'); - 启动指定应用:
await DeviceApps.openApp('com.google.android.apps.maps');
- 查询所有已安装应用:
- 注意事项:安卓11及以上系统对应用可见性做了限制,若仅需查询特定应用,可在
android/app/src/main/AndroidManifest.xml的manifest节点下添加声明对应包名;若需要全量查询所有已安装应用,需申请 QUERY_ALL_PACKAGES权限
问题2:已持有指定地址信息,如何在Flutter中创建可点击跳转链接,用户点击后可直接跳转至谷歌地图并加载对应地址?
该需求可通过url_launcher插件调用系统能力跳转谷歌地图实现,操作步骤如下:
- 在项目
pubspec.yaml的dependencies节点下添加依赖:
保存后执行dependencies: flutter: sdk: flutter url_launcher: ^6.2.0flutter pub get完成依赖安装。 - 构造谷歌地图跳转Uri并调用跳转逻辑,可直接封装为函数使用:
import 'package:url_launcher/url_launcher.dart'; Future<void> openAddressInGoogleMap(String targetAddress) async { // 对地址进行编码避免特殊字符导致Uri解析失败 final encodedAddress = Uri.encodeComponent(targetAddress); // 安卓平台谷歌地图跳转协议 final Uri mapUri = Uri.parse('geo:0,0?q=$encodedAddress'); if (await canLaunchUrl(mapUri)) { await launchUrl(mapUri); } else { // 此处可自定义未安装谷歌地图的兜底逻辑,比如提示用户安装、跳转网页版地图等 } } - 前端可直接用GestureDetector或者InkWell包裹文本,点击时调用上述函数即可实现可点击跳转效果。
- 注意事项:安卓11及以上系统需要在
AndroidManifest.xml的manifest节点下添加如下声明,否则无法检测到跳转能力:<queries> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="geo" /> </intent> </queries>
内容的提问来源于stack exchange,提问作者Nimish Khattar
相关产品推荐
相关产品推荐

