Flutter获取已安装应用列表插件device_installed_apps的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter获取已安装应用列表插件device_installed_apps的使用

device_installed_apps 是一个用于Flutter的插件,可以帮助开发者获取设备上已安装的应用程序列表。该插件目前仅支持Android平台。

安装指南

要使用此插件,请按照以下步骤进行安装:

  1. 在您的 pubspec.yaml 文件中添加依赖:

    dependencies:
      flutter:
        sdk: flutter
      device_installed_apps: ^latest_version
    
  2. 运行 flutter pub get 来安装插件。

  3. 根据需要在 android/app/src/main/AndroidManifest.xml 中添加必要的权限。

使用示例

以下是使用 device_installed_apps 插件的基本示例代码,展示了如何获取已安装的应用列表、系统应用列表、应用包名等信息,并执行一些操作如启动应用和打开设置界面。

完整示例Demo

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

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  Future<void> initPlatformState() async {
    // 获取所有已安装的应用(包括系统应用)
    DeviceInstalledApps.getApps(
      includeSystemApps: true,
      permissions: [
        'android.permission.NFC',
        'android.permission.ACCESS_FINE_LOCATION'
      ],
      shouldHasAllPermissions: false,
    ).then((value) {
      print("(DeviceInstalledApps) 1- ${value.length}");
      for (var i = 0; i < value.length; i++) {
        print("(DeviceInstalledApps) 1.$i- ${value[i].bundleId}");
      }
    });

    // 获取系统应用
    DeviceInstalledApps.getSystemApps().then((value) {
      print("(DeviceInstalledApps) 2- ${value.length}");
      for (var i = 0; i < value.length; i++) {
        print("(DeviceInstalledApps) 2.$i- ${value[i].bundleId}");
      }
    });

    // 获取应用包名列表
    DeviceInstalledApps.getAppsBundleIds()
        .then((value) => {print("(DeviceInstalledApps) 3- ${value.length}")});

    // 获取特定应用的信息
    DeviceInstalledApps.getAppInfo('com.hofinity')
        .then((value) => {print("(DeviceInstalledApps) 4- ${value.name}")});

    // 检查是否为系统应用
    DeviceInstalledApps.isSystemApp('com.hofinity')
        .then((value) => {print("(DeviceInstalledApps) 5- $value")});

    // 启动特定应用
    DeviceInstalledApps.launchApp('com.hofinity')
        .then((value) => {print("(DeviceInstalledApps) 6- $value")});

    // 打开应用设置(注释掉以避免自动执行)
    // DeviceInstalledApps.openSettings('com.hofinity');
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin Example App'),
        ),
        body: const Center(
          child: Text('DeviceInstalledApps'),
        ),
      ),
    );
  }
}

关键功能

  • 获取已安装应用列表getApps
  • 获取系统应用列表getSystemApps
  • 获取应用包名列表getAppsBundleIds
  • 获取特定应用信息getAppInfo
  • 检查是否为系统应用isSystemApp
  • 启动应用launchApp
  • 打开应用设置openSettings

请注意,某些功能可能需要适当的权限配置才能正常工作。确保在 AndroidManifest.xml 中添加了相应的权限声明。


以上内容提供了如何在Flutter项目中使用 `device_installed_apps` 插件来获取和管理设备上的应用程序信息的详细说明和完整示例代码。

更多关于Flutter获取已安装应用列表插件device_installed_apps的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter获取已安装应用列表插件device_installed_apps的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter中使用device_installed_apps插件来获取已安装应用列表的示例代码。这个插件允许你访问设备上已安装的应用程序列表,并获取它们的相关信息,如包名、名称、图标等。

首先,你需要在你的Flutter项目中添加device_installed_apps插件。打开你的pubspec.yaml文件,并添加以下依赖项:

dependencies:
  flutter:
    sdk: flutter
  device_installed_apps: ^x.y.z  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以使用以下代码来获取已安装的应用列表:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<InstalledApp> installedApps = [];

  @override
  void initState() {
    super.initState();
    _getInstalledApps();
  }

  Future<void> _getInstalledApps() async {
    try {
      // 检查权限
      bool hasPermission = await DeviceInstalledApps.checkPermission();
      if (!hasPermission) {
        // 请求权限(在某些平台上可能需要)
        bool requestPermission = await DeviceInstalledApps.requestPermission();
        if (requestPermission) {
          hasPermission = true;
        }
      }

      if (hasPermission) {
        // 获取已安装的应用列表
        installedApps = await DeviceInstalledApps.getInstalledApps(includeSystemApps: true);
        setState(() {});  // 更新UI
      } else {
        print("Permission denied");
      }
    } catch (e) {
      print("Error: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Installed Apps'),
        ),
        body: ListView.builder(
          itemCount: installedApps.length,
          itemBuilder: (context, index) {
            InstalledApp app = installedApps[index];
            return ListTile(
              leading: Image.memory(app.icon),  // 注意:这里可能需要处理icon的格式
              title: Text(app.appName),
              subtitle: Text(app.packageName),
            );
          },
        ),
      ),
    );
  }
}

注意事项

  1. 权限处理:在某些平台上(如Android),获取已安装应用列表可能需要特定的权限。你需要确保在AndroidManifest.xml中声明了必要的权限,并处理运行时权限请求。device_installed_apps插件通常会帮你处理大部分权限请求逻辑,但你可能仍然需要在你的应用中显式地请求权限。

  2. 图标处理:获取到的图标通常是字节数组(Uint8List),你可能需要将其转换为ImageProvider来在Flutter中显示。上面的代码示例中直接使用了Image.memory,但在某些情况下,你可能需要额外的处理来确保图标能够正确显示。

  3. 插件版本:确保你使用的是device_installed_apps插件的最新版本,因为插件的API和功能可能会随着版本更新而变化。

  4. 平台差异:不同的平台(iOS和Android)在获取已安装应用列表方面可能存在差异。确保你的代码考虑了这些差异,并在需要时进行了适当的处理。

  5. 隐私和安全性:获取用户设备上的已安装应用列表可能涉及用户隐私,因此请确保你的应用遵循相关的隐私政策和法律法规。

回到顶部