Flutter应用包管理插件carp_apps_package的使用
Flutter应用包管理插件carp_apps_package的使用
本库包含一个用于应用相关采样的采样包,以配合carp_mobile_sensing
框架使用。此包支持以下Measure
类型:
dk.cachet.carp.apps
- 手机上安装的应用列表。dk.cachet.carp.appusage
- 应用使用活动日志。
这些测量仅在Android设备上可用。
安装
要使用此包,请将以下内容添加到你的pubspec.yaml
文件中。注意,此包只能与carp_mobile_sensing
一起使用。
dependencies:
flutter:
sdk: flutter
carp_core: ^latest
carp_mobile_sensing: ^latest
carp_apps_package: ^latest
...
Android集成
在你的应用的AndroidManifest.xml
文件中添加以下内容,位于android/app/src/main
目录下,确保它包含以下权限请求:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="<YOUR_PACKAGE_NAME>"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
...
</manifest>
从Android 11开始,针对API级别30的应用程序,如果想列出"外部"应用程序,则必须在其AndroidManifest.xml
文件中声明一个新的"正常"权限,称为QUERY_ALL_PACKAGES
。
自2021年5月5日起,Google将对请求QUERY_ALL_PACKAGES
的应用程序进行更改。引用文档中的内容:
允许使用的条件包括应用程序必须发现设备上的所有已安装应用程序,用于意识或互操作性目的,可能有资格获得该权限。允许的用途包括设备搜索、防病毒应用程序、文件管理器和浏览器等。
授予访问此权限的应用程序必须遵守用户数据政策,包括显著披露和同意要求,并且不得将其使用扩展到未披露或无效的目的。
iOS集成
不支持。
使用
要使用此包,请将其导入你的应用中,并与carp_mobile_sensing
包一起使用:
import 'package:carp_core/carp_core.dart';
import 'package:carp_mobile_sensing/carp_mobile_sensing.dart';
import 'package:carp_apps_package/apps.dart';
在创建并运行研究之前,将此包注册到SamplingPackageRegistry
中:
SamplingPackageRegistry().register(AppsSamplingPackage());
可以像这样将APPS
和APP_USAGE
测量添加到研究协议中:
// 定义用于数据收集的设备
// 在这种情况下,只有这部智能手机
Smartphone phone = Smartphone();
protocol.addPrimaryDevice(phone);
// 添加一个自动任务,收集安装的应用列表
// 和应用使用活动的日志
protocol.addTaskControl(
ImmediateTrigger(),
BackgroundTask(measures: [
Measure(type: AppsSamplingPackage.APPS),
Measure(type: AppsSamplingPackage.APP_USAGE),
]),
phone);
示例代码
这是一个非常简单的示例,展示了如何使用此采样包与CARP Mobile Sensing(CAMS)一起使用。请注意,下面的代码不会运行。有关如何使用CAMS的详细信息,请参阅文档:CARP Mobile Sensing Wiki
import 'package:carp_core/carp_core.dart';
import 'package:carp_apps_package/apps.dart';
import 'package:carp_mobile_sensing/carp_mobile_sensing.dart';
void main() async {
// 注册此采样包以使用其测量
SamplingPackageRegistry().register(AppsSamplingPackage());
// 创建一个研究协议
StudyProtocol protocol = StudyProtocol(
ownerId: 'owner@dtu.dk',
name: 'Apps Sensing Example',
);
// 定义用于数据收集的设备
// 在这种情况下,只有这部智能手机
Smartphone phone = Smartphone();
protocol.addPrimaryDevice(phone);
// 添加一个自动任务,收集安装的应用列表
// 和应用使用活动的日志
protocol.addTaskControl(
ImmediateTrigger(),
BackgroundTask(measures: [
Measure(type: AppsSamplingPackage.APPS),
Measure(type: AppsSamplingPackage.APP_USAGE),
]),
phone);
}
更多关于Flutter应用包管理插件carp_apps_package的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter应用包管理插件carp_apps_package的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter开发中,carp_apps_package
插件通常用于管理和操作应用包信息。虽然具体的使用细节可能会根据插件的版本和具体需求有所不同,但以下是一个基本示例,展示了如何在Flutter应用中使用 carp_apps_package
插件来获取应用包信息。
首先,确保你已经在 pubspec.yaml
文件中添加了 carp_apps_package
插件的依赖:
dependencies:
flutter:
sdk: flutter
carp_apps_package: ^x.y.z # 替换为实际的版本号
然后,运行 flutter pub get
来获取依赖。
接下来,在你的 Dart 文件中导入该插件,并使用它来获取应用包信息。以下是一个简单的示例代码:
import 'package:flutter/material.dart';
import 'package:carp_apps_package/carp_apps_package.dart'; // 导入插件
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String? packageName;
String? versionName;
int? versionCode;
@override
void initState() {
super.initState();
_fetchAppInfo();
}
Future<void> _fetchAppInfo() async {
try {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
setState(() {
packageName = packageInfo.packageName;
versionName = packageInfo.version;
versionCode = packageInfo.buildNumber;
});
} catch (e) {
print("Failed to fetch app info: $e");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('App Info Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Package Name: $packageName',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Text(
'Version Name: $versionName',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Text(
'Version Code: $versionCode',
style: TextStyle(fontSize: 20),
),
],
),
),
);
}
}
在这个示例中,我们做了以下几件事情:
- 在
pubspec.yaml
中添加了carp_apps_package
依赖。 - 在 Dart 文件中导入了
carp_apps_package
插件。 - 使用
PackageInfo.fromPlatform()
方法异步获取应用包信息。 - 在 UI 中展示了包名、版本名和版本号。
请注意,carp_apps_package
插件的具体 API 可能会随着版本更新而变化,因此建议查阅最新的官方文档或插件仓库中的 README 文件以获取最准确的信息。如果 carp_apps_package
插件的 API 有所不同,或者你需要更高级的功能,可能需要根据实际情况调整代码。