我需要在我的项目中访问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()来指定对响应/输出的约束。

09-28 04:24