Html5 + plus 获取Android通话记录和短信

4,637 阅读1分钟

一、 获取Android通话记录

  1. 首先,先得获取到Android手机通话记录的权限 点击这里→ 查看获取权限的方法。
  1. 代码如下:
     var CallLog = plus.android.importClass("android.provider.CallLog");
     var main = plus.android.runtimeMainActivity();
     var obj = main.getContentResolver();
     plus.android.importClass(obj);
     //查询
     var cursor = obj.query(
        CallLog.Calls.CONTENT_URI,
        null,
        null,
        null,
        null
     );
     plus.android.importClass(cursor);
     var content = []; // 用来存储数据
     var count = 0; // 记录多少条
     if (cursor.moveToFirst()) {
        while (cursor.moveToNext()) {
          count++;
          //号码
          var number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
          
          //呼叫类型
          var type;
          switch (
            parseInt(cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE)))) 
            // 判断通话类型
          {
            case CallLog.Calls.INCOMING_TYPE:
              type = "呼入";
              break;
            case CallLog.Calls.OUTGOING_TYPE:
              type = "呼出";
              break;
            case CallLog.Calls.MISSED_TYPE:
              type = "未接";
              break;
            default:
               type = "挂断"; //应该是挂断.根据我手机类型判断出的
              break;
            }
            
            // 获取时间
             var date = new Date(parseInt(
                cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.DATE)))
             );
             
             // 联系人
             var Name_Col = cursor.getColumnIndexOrThrow(CallLog.Calls.CACHED_NAME);
             var name = cursor.getString(Name_Col);
             
             // 号码归属地 返回:北京 联通
             var numberLocation = cursor.getString(
                cursor.getColumnIndex(CallLog.Calls.GEOCODED_LOCATION)
             );
             
             //通话时间,单位:s
             var Duration_Col = cursor.getColumnIndexOrThrow(CallLog.Calls.DURATION);
             var duration = cursor.getString(Duration_Col);
             
             // 存入数组 
             content.push({
                name: name, // 联系人的姓名
                mobile: number, // 联系人电话
                numberLocation: numberLocation, // 号码的归属地
                callTime: new Date().getTime(date), // 呼入或呼出时间
                talkTime: duration, // 通话时长
                type: type
             });
            
             // 查询50条 就跳出
             if (count > 50) {
                break;
              }
            }
          }
          
          console.log(content)
 

二、 获取Android短信内容

  1. 首先,先得获取到Android手机短信的权限 点击这里→ 查看获取权限的方法。
  1. 代码如下:

        //Sms存放所有短信
        var Sms = [];
        var Cursor = plus.android.importClass("android.database.Cursor");
        var Uri = plus.android.importClass("android.net.Uri");
        //注意啦,android.net.Uri中的net是小写
        var activity = plus.android.runtimeMainActivity();
        var uri = Uri.parse("content://sms/");
        var projection = new Array(
          "_id",
          "address",
          "person",
          "body",
          "date",
          "type"
        );
        var cusor = activity.managedQuery(
          uri,
          projection,
          null,
          null,
          "date desc"
        );
        var idColumn = cusor.getColumnIndex("_id");
        var nameColumn = cusor.getColumnIndex("person");
        var phoneNumberColumn = cusor.getColumnIndex("address");
        var smsbodyColumn = cusor.getColumnIndex("body");
        var dateColumn = cusor.getColumnIndex("date");
        var typeColumn = cusor.getColumnIndex("type");
        if (cusor != null) {
          while (cusor.moveToNext()) {
            Sms.push({
              id: usor.getString(idColumn), // 就是id
              person: cusor.getInt(nameColumn), // 发送人
              Date:  cusor.getLong(dateColumn), // 时间
              address: cusor.getString(phoneNumberColumn), // 可以说是电话号码吧
              SmsInfo: cusor.getString(smsbodyColumn), // 内容
              type: cusor.getString(typeColumn) // 类型
            });
          }
          cusor.close(); // 防止内存泄漏的  但我这开启了会导致app闪退
        }
        
        

这是个api