填充联系人、通话记录、短信的方法

填充联系人、通话记录、短信的方法

前提

Android自动化测试中,通过自动化测试脚本填充联系人通话记录短信等数据,可以模拟出更接近真实用户的使用场景。这种模拟有助于发现那些在日常使用中才会出现的问题,从而提高测试的全面性和准确性。

实现方法

联系人

权限

  • 读写联系人需要以下权限,直接动态申请即可
xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>

填充方法

删除方法

通话记录

权限

  • 读写通话记录需要以下权限,直接动态申请即可
xml
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>

填充方法

java
private boolean insertCallLog(String number, String duration, String type, String isNew) {
    ContentValues values = new ContentValues();
    values.put(CallLog.Calls.NUMBER, number);  // 通话号码
    values.put(CallLog.Calls.DATE, System.currentTimeMillis());  // 通话日期
    values.put(CallLog.Calls.DURATION, duration);  // 通话时长
    values.put(CallLog.Calls.TYPE, type); // 通话类型(呼入、呼出、未接)
    values.put(CallLog.Calls.NEW, isNew);  // 是否为新通话记录
    try {
        getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);
        return true;
    } catch (Exception e) {
        Log.e(TAG, "insertCallLog error: " + e);
        return false;
    }
}

删除方法

java
private boolean deleteAllCallLogs() {
    try {
        // 删除所有通话记录
        int rowsDeleted = getContentResolver().delete(CallLog.Calls.CONTENT_URI, null, null);
         // 如果删除的记录数大于 0,表示删除成功
        if (rowsDeleted > 0) {
            return true;
        }
    } catch (Exception e) {
        Log.e(TAG, "deleteAllCallLogs error: " + e);
    }
    return false;
}

短信

权限

  • 短信较为特殊,由于Android4.4之后,除了默认短信应用以外,其他应用将无法插入短信。因此需要将APK伪装成一个短信应用,并设置为默认的短信应用。

AndroidManifest.xml中添加

  • 分别创建空的HeadlessSmsSendServiceMmsReceiverSmsActivitySmsReceiverSmsService
创建所须的类
创建所须的类
  • 最后,需要将APK设置为默认短信应用(需要手动授予)

填充方法

java
private void insertMessages(String num, String body, long date) {
    ContentResolver contentResolver = getContentResolver();
    ContentValues values = new ContentValues();
    Uri uri = Uri.parse("content://sms/");
    values.put(Telephony.Sms.ADDRESS, num);
    values.put(Telephony.Sms.DATE, date);
    values.put(Telephony.Sms.READ, false);
    values.put(Telephony.Sms.STATUS, Telephony.Sms.STATUS_NONE);
    values.put(Telephony.Sms.BODY, body);
    contentResolver.insert(uri, values);
}

删除方法

java
private void deleteAllSMS() {
    Uri uriSms = Uri.parse("content://sms/");
    Cursor c = getContentResolver().query(uriSms, null, null, null, null);

    while (c.moveToNext()) {
        long id = c.getLong(c.getColumnIndexOrThrow("_id"));
        getContentResolver().delete(Uri.parse("content://sms/" + id), null, null);
    }
    c.close();
}
获取APK相关信息
Android使用uiautomator

评论区

评论加载中...