我需要在我的项目中访问android手机的通话记录,但在Flutter中没有那么多的经验。找到一个名为“call_log”的软件包,但不知道如何实现。我非常感谢您的帮助。
这是“call_log”包的自述文件:
// IMPORT PACKAGE
import 'package:call_log/call_log.dart';
// GET WHOLE CALL LOG
Iterable<CallLogEntry> entries = await CallLog.get();
// QUERY CALL LOG (ALL PARAMS ARE OPTIONAL)
var now = DateTime.now();
int from = now.subtract(Duration(days: 60)).millisecondsSinceEpoch;
int to = now.subtract(Duration(days: 30)).millisecondsSinceEpoch;
Iterable<CallLogEntry> entries = await CallLog.query(
dateFrom: from,
dateTo: to,
durationFrom: 0,
durationTo: 60,
name: 'John Doe',
number: '901700000',
type: CallType.incoming,
);
最佳答案
从您的问题中我可以理解的是,您无法在此处使用CallLog.get()的输出。
将包添加到pubspec.yaml文件依赖项并导入后,可以使用以下代码行调用 get()函数-
Iterable<CallLogEntry> entries = await CallLog.get();
它返回CallLogEntry类型的Iterable。可迭代对象只是可以顺序访问的值或“元素”的集合。
输出将存储在条目中,然后可以对其进行迭代以访问值,例如-
void _callLogs() async {
Iterable<CallLogEntry> entries = await CallLog.get();
for (var item in entries) {
print(item.name);
}
}
上面的代码片段将打印所有CallLog条目的名称。尝试将item.name替换为item.number,item.duration,item.callType。
另外,不要忘记将以下行添加到AndroidManifest.xml
<uses-permission android:name="android.permission.READ_CALL_LOG" />
除了问题本身中提到的那样,还可以使用CallLog.query()代替CallLog.get()来指定对响应/输出的约束。