Flutter安全获取已安装应用列表插件installed_apps_safe_permission的使用
Flutter安全获取已安装应用列表插件installed_apps_safe_permission
的使用
插件说明
Installed Apps
插件为 Flutter 提供了与设备上已安装的应用程序相关的实用方法。
目前,仅支持 Android 平台。
开始使用
使用方法
获取已安装应用程序列表
List<AppInfo> apps = await InstalledApps.getInstalledApps(
bool excludeSystemApps, // 是否排除系统应用
bool withIcon, // 是否包含图标
String packageNamePrefix // 包名前缀过滤器
);
- 使用
packageNamePrefix
参数可以筛选出包名以特定前缀开头的应用程序。
根据包名获取应用信息
AppInfo app = await InstalledApps.getAppInfo(String packageName);
AppInfo
模型类
class AppInfo {
String name; // 应用名称
Uint8List? icon; // 应用图标(可选)
String packageName; // 包名
String versionName; // 版本名称
int versionCode; // 版本号
BuiltWith builtWith; // 构建工具
int installedTimestamp; // 安装时间戳
}
启动指定包名的应用程序
InstalledApps.startApp(String packageName);
打开指定包名的应用设置页面
InstalledApps.openSettings(String packageName);
判断是否为系统应用
bool isSystemApp = await InstalledApps.isSystemApp(String packageName);
卸载指定包名的应用程序
bool uninstallIsSuccessful = await InstalledApps.uninstallApp(String packageName);
检查应用是否已安装
bool appIsInstalled = await InstalledApps.isAppInstalled(String packageName);
完整示例代码
以下是一个完整的 Flutter 示例代码,展示如何使用 installed_apps_safe_permission
插件来获取并显示设备上的已安装应用列表。
示例代码
import 'package:flutter/material.dart';
import 'package:installed_apps_safe_permission/installed_apps_safe_permission.dart'; // 导入插件
import 'package:permission_handler/permission_handler.dart'; // 权限管理插件
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '已安装应用列表',
home: InstalledAppsScreen(),
);
}
}
class InstalledAppsScreen extends StatefulWidget {
@override
_InstalledAppsScreenState createState() => _InstalledAppsScreenState();
}
class _InstalledAppsScreenState extends State<InstalledAppsScreen> {
List<AppInfo> _apps = []; // 存储已安装应用的信息
bool _loading = true;
@override
void initState() {
super.initState();
_fetchInstalledApps();
}
Future<void> _fetchInstalledApps() async {
// 请求权限
if (await Permission.storage.request().isGranted) {
try {
// 获取已安装应用列表
final apps = await InstalledAppsSafePermission.getInstalledApps(
excludeSystemApps: true, // 排除系统应用
withIcon: true, // 包含图标
packageNamePrefix: null // 不限制包名前缀
);
setState(() {
_apps = apps;
_loading = false;
});
} catch (e) {
print("获取应用列表失败: $e");
setState(() => _loading = false);
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('已安装应用列表'),
),
body: _loading
? Center(child: CircularProgressIndicator())
: ListView.builder(
itemCount: _apps.length,
itemBuilder: (context, index) {
final app = _apps[index];
return ListTile(
leading: app.icon != null
? CircleAvatar(
backgroundImage: MemoryImage(app.icon!),
)
: null,
title: Text(app.name),
subtitle: Text(app.packageName),
onTap: () {
// 示例:跳转到应用详情页面
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AppDetailScreen(app: app),
),
);
},
);
},
),
);
}
}
// 应用详情页面
class AppDetailScreen extends StatelessWidget {
final AppInfo app;
const AppDetailScreen({required this.app});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(app.name),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('包名: ${app.packageName}'),
Text('版本: ${app.versionName} (${app.versionCode})'),
Text('安装时间: ${DateTime.fromMillisecondsSinceEpoch(app.installedTimestamp).toString()}'),
],
),
),
);
}
}
注意事项
- 权限管理:在 Android 上,访问已安装应用列表需要
READ_EXTERNAL_STORAGE
或QUERY_ALL_PACKAGES
权限。 - 平台支持:该插件目前仅支持 Android 平台,iOS 不支持。
- 依赖管理:确保在
pubspec.yaml
中添加依赖项:dependencies: installed_apps_safe_permission: ^latest_version permission_handler: ^latest_version
更多关于Flutter安全获取已安装应用列表插件installed_apps_safe_permission的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,如果你想安全地获取已安装应用列表,可以使用 installed_apps_safe_permission
插件。这个插件允许你在请求用户权限后获取已安装应用的列表,并且遵循了Android的权限管理规范。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 installed_apps_safe_permission
插件的依赖:
dependencies:
flutter:
sdk: flutter
installed_apps_safe_permission: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 请求权限
在获取已安装应用列表之前,你需要请求用户授予 QUERY_ALL_PACKAGES
权限。这个权限在Android 11及以上版本中是必需的。
import 'package:installed_apps_safe_permission/installed_apps_safe_permission.dart';
Future<void> requestPermission() async {
bool hasPermission = await InstalledAppsSafePermission.hasPermission();
if (!hasPermission) {
await InstalledAppsSafePermission.requestPermission();
}
}
3. 获取已安装应用列表
在确保用户已经授予权限后,你可以使用 InstalledAppsSafePermission.getInstalledApps()
方法来获取已安装应用的列表。
import 'package:installed_apps_safe_permission/installed_apps_safe_permission.dart';
Future<void> getInstalledApps() async {
List<AppInfo> apps = await InstalledAppsSafePermission.getInstalledApps();
for (var app in apps) {
print('App Name: ${app.appName}, Package Name: ${app.packageName}');
}
}
4. 处理权限拒绝的情况
如果用户拒绝了权限请求,你可以提示用户并引导他们去设置中手动授予权限。
import 'package:installed_apps_safe_permission/installed_apps_safe_permission.dart';
Future<void> checkAndRequestPermission() async {
bool hasPermission = await InstalledAppsSafePermission.hasPermission();
if (!hasPermission) {
bool granted = await InstalledAppsSafePermission.requestPermission();
if (!granted) {
// 提示用户去设置中手动授予权限
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('权限被拒绝'),
content: Text('请去设置中手动授予权限以获取已安装应用列表。'),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text('确定'),
),
],
),
);
}
}
}
5. 完整示例
以下是一个完整的示例,展示了如何请求权限并获取已安装应用列表:
import 'package:flutter/material.dart';
import 'package:installed_apps_safe_permission/installed_apps_safe_permission.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
[@override](/user/override)
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
List<AppInfo> apps = [];
[@override](/user/override)
void initState() {
super.initState();
checkAndRequestPermission();
}
Future<void> checkAndRequestPermission() async {
bool hasPermission = await InstalledAppsSafePermission.hasPermission();
if (!hasPermission) {
bool granted = await InstalledAppsSafePermission.requestPermission();
if (!granted) {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('权限被拒绝'),
content: Text('请去设置中手动授予权限以获取已安装应用列表。'),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text('确定'),
),
],
),
);
} else {
getInstalledApps();
}
} else {
getInstalledApps();
}
}
Future<void> getInstalledApps() async {
List<AppInfo> installedApps = await InstalledAppsSafePermission.getInstalledApps();
setState(() {
apps = installedApps;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('已安装应用列表'),
),
body: ListView.builder(
itemCount: apps.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(apps[index].appName),
subtitle: Text(apps[index].packageName),
);
},
),
);
}
}