Flutter应用可用性检测插件flutter_appavailability的使用

Flutter应用可用性检测插件flutter_appavailability的使用

Flutter AppAvailability 插件

Pub

一个允许您检查应用程序是否已安装或启用、启动应用程序并获取已安装的应用程序列表的 Flutter 插件。

该插件受 Cordova 的 AppAvailability 插件 启发。


开始使用

对于帮助开始使用 Flutter,请参阅我们的在线文档: Flutter 文档

对于编辑插件代码的帮助,请查看文档: 开发包


安装

首先,在 pubspec.yaml 文件中添加 flutter_appavailability 作为依赖项:

dependencies:
  flutter_appavailability: ^<最新版本号>

然后运行 flutter packages get


可用方法

以下是插件提供的方法:

  • checkAvailability(String uri)
    检查指定 URI 的应用程序是否存在。

  • getInstalledApps()(仅适用于 Android)
    获取设备上已安装的所有应用程序列表。

  • isAppEnabled(String uri)(仅适用于 Android)
    检查指定 URI 的应用程序是否已启用。

  • launchApp(String uri)
    启动指定 URI 的应用程序。

更多详细信息请查看 官方文档


示例代码

以下是一个小型 Flutter 应用程序示例,展示如何获取已安装的应用程序并列出它们供用户启动。

import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:io';

import 'package:flutter_appavailability/flutter_appavailability.dart';

void main() => runApp(new MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {

  List<Map<String, String>> installedApps;
  List<Map<String, String>> iOSApps = [
    {
      "app_name": "日历",
      "package_name": "calshow://" // iOS URL Scheme 示例
    },
    {
      "app_name": "Facebook",
      "package_name": "fb://" // iOS URL Scheme 示例
    },
    {
      "app_name": "WhatsApp",
      "package_name": "whatsapp://" // iOS URL Scheme 示例
    }
  ];

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  // 异步初始化以获取已安装的应用程序
  Future<void> getApps() async {
    List<Map<String, String>> _installedApps;

    if (Platform.isAndroid) {
      // 获取 Android 设备上的所有已安装应用
      _installedApps = await AppAvailability.getInstalledApps();

      // 示例:检查 Chrome 是否存在
      print(await AppAvailability.checkAvailability("com.android.chrome"));
      // 输出: {app_name: Chrome, package_name: com.android.chrome, versionCode: null, version_name: 55.0.2883.91}

      // 示例:检查 Chrome 是否已启用
      print(await AppAvailability.isAppEnabled("com.android.chrome"));
      // 输出: true

    } else if (Platform.isIOS) {
      // iOS 不支持获取已安装的应用程序列表
      _installedApps = iOSApps;

      // 示例:检查日历应用是否可用
      print(await AppAvailability.checkAvailability("calshow://"));
      // 输出: {app_name: , package_name: calshow://, versionCode: , version_name: }
    }

    // 更新 UI 状态
    setState(() {
      installedApps = _installedApps;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 如果尚未获取应用列表,则调用 getApps 方法
    if (installedApps == null)
      getApps();

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('flutter_appavailability 插件示例'),
        ),
        body: ListView.builder(
          itemCount: installedApps == null ? 0 : installedApps.length,
          itemBuilder: (context, index) {
            return ListTile(
              title: Text(installedApps[index]["app_name"]),
              trailing: IconButton(
                icon: const Icon(Icons.open_in_new),
                onPressed: () {
                  Scaffold.of(context).hideCurrentSnackBar();
                  // 尝试启动选定的应用程序
                  AppAvailability.launchApp(installedApps[index]["package_name"]).then((_) {
                    print("已启动应用: ${installedApps[index]["app_name"]}");
                  }).catchError((err) {
                    // 显示错误提示
                    Scaffold.of(context).showSnackBar(SnackBar(
                      content: Text("未找到应用: ${installedApps[index]["app_name"]}"),
                    ));
                    print(err);
                  });
                },
              ),
            );
          },
        ),
      ),
    );
  }
}
1 回复

更多关于Flutter应用可用性检测插件flutter_appavailability的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_appavailability 是一个用于检测设备上已安装应用程序的 Flutter 插件。它可以帮助你检查某个应用是否已安装,并获取已安装应用的列表。这个插件在需要与设备上其他应用进行交互的场景中非常有用。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 flutter_appavailability 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_appavailability: ^0.0.21

然后运行 flutter pub get 来安装插件。

使用插件

1. 导入插件

在你的 Dart 文件中导入 flutter_appavailability 插件:

import 'package:flutter_appavailability/flutter_appavailability.dart';

2. 检查应用是否已安装

你可以使用 AppAvailability.checkAvailability 方法来检查某个应用是否已安装。这个方法需要传入应用的包名(Android)或 URL Scheme(iOS)。

void checkAppAvailability() async {
  try {
    // 检查应用是否已安装
    bool isAvailable = await AppAvailability.checkAvailability("com.example.app");
    if (isAvailable) {
      print("应用已安装");
    } else {
      print("应用未安装");
    }
  } catch (e) {
    print("检查应用可用性时出错: $e");
  }
}

3. 获取已安装应用列表

你可以使用 AppAvailability.getInstalledApps 方法来获取设备上已安装应用的列表。

void getInstalledApps() async {
  try {
    // 获取已安装应用列表
    List<Map<String, String>> apps = await AppAvailability.getInstalledApps();
    for (var app in apps) {
      print("应用名称: ${app['app_name']}, 包名: ${app['package_name']}");
    }
  } catch (e) {
    print("获取已安装应用列表时出错: $e");
  }
}

4. 打开应用

你可以使用 AppAvailability.launchApp 方法来打开某个应用。这个方法需要传入应用的包名(Android)或 URL Scheme(iOS)。

void launchApp() async {
  try {
    // 打开应用
    await AppAvailability.launchApp("com.example.app");
  } catch (e) {
    print("打开应用时出错: $e");
  }
}

注意事项

  • Android: 你需要确保在 AndroidManifest.xml 文件中添加了必要的权限(如果有的话)。
  • iOS: 你需要确保在 Info.plist 文件中添加了必要的 URL Scheme。

示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_appavailability 插件来检查应用是否已安装、获取已安装应用列表以及打开应用。

import 'package:flutter/material.dart';
import 'package:flutter_appavailability/flutter_appavailability.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('App Availability Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: checkAppAvailability,
                child: Text('Check App Availability'),
              ),
              ElevatedButton(
                onPressed: getInstalledApps,
                child: Text('Get Installed Apps'),
              ),
              ElevatedButton(
                onPressed: launchApp,
                child: Text('Launch App'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void checkAppAvailability() async {
    try {
      bool isAvailable = await AppAvailability.checkAvailability("com.example.app");
      if (isAvailable) {
        print("应用已安装");
      } else {
        print("应用未安装");
      }
    } catch (e) {
      print("检查应用可用性时出错: $e");
    }
  }

  void getInstalledApps() async {
    try {
      List<Map<String, String>> apps = await AppAvailability.getInstalledApps();
      for (var app in apps) {
        print("应用名称: ${app['app_name']}, 包名: ${app['package_name']}");
      }
    } catch (e) {
      print("获取已安装应用列表时出错: $e");
    }
  }

  void launchApp() async {
    try {
      await AppAvailability.launchApp("com.example.app");
    } catch (e) {
      print("打开应用时出错: $e");
    }
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!