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

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

使用

要使用此插件,在您的 pubspec.yaml 文件中添加 get_apps 作为依赖项。

示例

import 'package:flutter/material.dart';
import 'package:get_apps/app_info.dart';
import 'package:get_apps/get_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();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('所有应用'),
        ),
        body: FutureBuilder<List<AppInfo>>(
          future: GetApps().getUserApps(), // 获取已安装的应用列表
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              final data = snapshot.requireData;
              return ListView(
                children: data
                    .map((e) => ListTile(
                          onTap: () => GetApps().runExternalApp(e.appPackage), // 点击应用图标运行应用
                          leading: Image.memory(e.appIcon), // 应用图标
                          title: Text(e.appName), // 应用名称
                          subtitle: Text(e.appPackage), // 应用包名
                        ))
                    .toList(),
              );
            }
            if (snapshot.hasError) {
              return Center(
                child: Text(snapshot.error.toString()), // 显示错误信息
              );
            }
            return const Center(
              child: CircularProgressIndicator(), // 加载中
            );
          },
        ),
      ),
    );
  }
}

代码解释

  • 导入必要的库

    import 'package:flutter/material.dart';
    import 'package:get_apps/app_info.dart';
    import 'package:get_apps/get_apps.dart';
    
  • 主函数

    void main() => runApp(const MyApp());
    
  • 定义 MyApp

    class MyApp extends StatefulWidget {
      const MyApp({super.key});
    
      @override
      State<MyApp> createState() => _MyAppState();
    }
    
  • 定义 _MyAppState

    class _MyAppState extends State<MyApp> {
      @override
      void initState() {
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: const Text('所有应用'),
            ),
            body: FutureBuilder<List<AppInfo>>(
              future: GetApps().getUserApps(), // 异步获取已安装的应用列表
              builder: (context, snapshot) {
                if (snapshot.hasData) {
                  final data = snapshot.requireData;
                  return ListView(
                    children: data
                        .map((e) => ListTile(
                              onTap: () => GetApps().runExternalApp(e.appPackage), // 点击应用图标运行应用
                              leading: Image.memory(e.appIcon), // 应用图标
                              title: Text(e.appName), // 应用名称
                              subtitle: Text(e.appPackage), // 应用包名
                            ))
                        .toList(),
                  );
                }
                if (snapshot.hasError) {
                  return Center(
                    child: Text(snapshot.error.toString()), // 显示错误信息
                  );
                }
                return const Center(
                  child: CircularProgressIndicator(), // 加载中
                );
              },
            ),
          ),
        );
      }
    }
    

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

1 回复

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


当然,以下是如何在Flutter应用中使用get_apps插件来获取已安装应用列表的示例代码。

首先,确保你已经在pubspec.yaml文件中添加了get_apps依赖:

dependencies:
  flutter:
    sdk: flutter
  get_apps: ^2.0.0  # 请检查最新版本号

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

接下来,你可以在你的Flutter应用中按照以下步骤使用get_apps插件:

  1. 导入插件

在你的Dart文件中(例如main.dart),导入get_apps插件:

import 'package:get_apps/get_apps.dart';
  1. 请求权限(如果需要):

在Android上获取已安装应用列表可能需要QUERY_ALL_PACKAGES权限。你可以在AndroidManifest.xml文件中添加这个权限,不过从Android 11(API级别30)开始,需要使用PackageVisibility来获取应用列表。

<!-- 在 AndroidManifest.xml 中添加 -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<queries>
    <intent>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent>
</queries>

注意:在Android 12(API级别32)及以上版本中,直接使用QUERY_ALL_PACKAGES权限可能会被限制,建议使用PackageVisibility

  1. 获取已安装应用列表

在你的Flutter代码中,使用GetApps.getInstalledApps()方法来获取已安装的应用列表:

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

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

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

class _MyAppState extends State<MyApp> {
  List<AppInfo> _apps = [];

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

  Future<void> _getInstalledApps() async {
    try {
      List<AppInfo> apps = await GetApps.getInstalledApps(includeSystemApps: true, includeAppIcons: true);
      setState(() {
        _apps = apps;
      });
    } catch (e) {
      print("Error getting installed apps: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Installed Apps'),
        ),
        body: _apps.isEmpty
            ? Center(child: CircularProgressIndicator())
            : ListView.builder(
                itemCount: _apps.length,
                itemBuilder: (context, index) {
                  AppInfo app = _apps[index];
                  return ListTile(
                    leading: Image.memory(app.icon),
                    title: Text(app.appName),
                    subtitle: Text(app.packageName),
                  );
                },
              ),
      ),
    );
  }
}

class AppInfo {
  String appName;
  String packageName;
  Uint8List icon;

  AppInfo({required this.appName, required this.packageName, required this.icon});
}

注意:由于get_apps插件返回的可能是Map或其他数据结构,这里我们假设返回的是一个包含appNamepackageNameicon的列表。实际使用时,你可能需要根据get_apps插件的实际返回数据结构来调整AppInfo类的定义。

  1. 运行应用

确保你的设备或模拟器已经连接,然后运行flutter run来查看结果。

这样,你就可以在Flutter应用中获取并显示已安装的应用列表了。

回到顶部