首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询调用日志的PhoneGap API

查询调用日志的PhoneGap API
EN

Stack Overflow用户
提问于 2011-06-08 10:15:31
回答 2查看 8.5K关注 0票数 8

我刚刚开始使用phoneGap和安卓系统。建立基本样本。

我想知道,是否有一个API来获取调用日志。我希望创建一个网格,显示:

一段时间内

  • 错过的呼叫数
  • 接收到的呼叫数
  • 发出的呼叫数量
  • 接收到的呼叫和呼叫的总时间

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-22 07:35:42

我做了一些研究,并成功地构建了一个PhoneGap插件,可以从android.provider.CallLog获取CallLog。

这将返回一个JSON { Rows: [] },其中Rows是一个包含以下字段(as数组)的二维调用记录数组,顺序如下:

  • New

  • Cached
  • Date (作为UNIX时间戳)
  • 编号,
  • 类型(1-传入,2-传出,3-遗漏)
  • 持续时间(秒)(秒)--

<代码>H 116缓存数字类型<代码>H 217<代码>H 118缓存数字标签<代码>H 219<代码>F 220

详情见http://developer.android.com/reference/android/provider/CallLog.Calls.html

我也做了一个小的例子使用这个插件,它将显示总数的传出电话,错过的电话和来电,并把他们画成一个饼图。样品使用的是FusionCharts的派图。

您可以从以下站点下载测试版试用.apk:

http://www.sudipto.net/download/android/apps/CallLog/beta/CallChart.apk.zip

(使用在Android 3或更高版本中工作的JavaScript SVG图表)

下面是您要深入研究的源代码zip:

http://www.sudipto.net/download/android/apps/CallLog/beta/calllog_phonegap_eclipseclassic_source.zip

以下是我的完整代码:

CallLog.java

代码语言:javascript
复制
package com.fusioncharts.phonegap.plugin;

import org.json.*;

import android.database.*;
import android.util.Log;

import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;
import com.phonegap.api.PluginResult.Status;

public class CallLog extends Plugin {

        @Override
        public PluginResult execute(String actionName, JSONArray arguments, String callback) 
        {


                JSONObject callLogs = new JSONObject();
                PluginResult result = null;


                try {
                        switch (getActionItem(actionName))
                        {
                                case 1:
                                        callLogs = getAllCallLog(arguments);
                                        result = new PluginResult(Status.OK, callLogs);
                                        break;
                                default:
                                        result = new PluginResult(Status.INVALID_ACTION);
                        }
                } catch (JSONException jsonEx) {
                        result = new PluginResult(Status.JSON_EXCEPTION);
                }



                return result;
        }


        private JSONObject getAllCallLog(JSONArray requirements) throws JSONException
        {
                JSONObject callLog = new JSONObject();

                String[] strFields = {
                        android.provider.CallLog.Calls.DATE,
                        android.provider.CallLog.Calls.NUMBER, 
                        android.provider.CallLog.Calls.TYPE,
                        android.provider.CallLog.Calls.DURATION,
                        android.provider.CallLog.Calls.NEW,
                        android.provider.CallLog.Calls.CACHED_NAME,
                        android.provider.CallLog.Calls.CACHED_NUMBER_TYPE,
                        android.provider.CallLog.Calls.CACHED_NUMBER_LABEL//,
                };

                try {
                        Cursor callLogCursor = ctx.getContentResolver().query(
                                android.provider.CallLog.Calls.CONTENT_URI,
                                strFields,
                                null,
                                null,
                                android.provider.CallLog.Calls.DEFAULT_SORT_ORDER
                            );



                int callCount = callLogCursor.getCount();

                if(callCount>0){
                        JSONArray callLogItem = new JSONArray();
                        JSONArray callLogItems = new JSONArray();

                        String[] columnNames = callLogCursor.getColumnNames();

                        callLogCursor.moveToFirst();
                        do
                        {
                                callLogItem.put(callLogCursor.getLong(0));
                                callLogItem.put(callLogCursor.getString(1));
                                callLogItem.put(callLogCursor.getInt(2));
                                callLogItem.put(callLogCursor.getLong(3));
                                callLogItem.put(callLogCursor.getInt(4));
                                callLogItem.put(callLogCursor.getString(5));
                                callLogItem.put(callLogCursor.getInt(6));
                                callLogItems.put(callLogItem);
                                callLogItem = new JSONArray();

                        }while(callLogCursor.moveToNext());

                        callLog.put("Rows", callLogItems);
                }


                callLogCursor.close();
                }catch(Exception e)
                {

                        Log.d("CallLog_Plugin", " ERROR : SQL to get cursor: ERROR " + e.getMessage());
                }



                return callLog;
        }

        private JSONObject getTimeRangeCallLog(JSONArray requirements)
        {

        private int getActionItem(String actionName) throws JSONException 
        {
                JSONObject actions = new JSONObject("{'all':1,'last':2,'time':3}");
                if (actions.has(actionName))
                        return actions.getInt(actionName);

                return 0;
        }
}

calllog.phonegap.js

代码语言:javascript
复制
    var CallLog = function() {};
    CallLog.prototype.all = function(params, successCallback, failureCallback) 
    {
        return PhoneGap.exec(successCallback, failureCallback, 'CallLog', 'all', [params]);
    };

    PhoneGap.addConstructor( function() {
          PhoneGap.addPlugin("calllog", new CallLog());
          PluginManager.addService("CallLog","com.fusioncharts.phonegap.plugin.CallLog");
    });

Application.java

代码语言:javascript
复制
var CallLog = function() {};
CallLog.prototype.all = function(params, successCallback, failureCallback) 
{
    /* @param   successCallback
     * @param   failureCallback
     * @param   plugin name
     * @param   action
     * @param   JSONArray of parameters
     */ 
    return PhoneGap.exec(successCallback, failureCallback, 'CallLog', 'all', [params]);
};

PhoneGap.addConstructor( function() {
      //Register the javascript plugin with PhoneGap
      PhoneGap.addPlugin("calllog", new CallLog());

      //Register the native class of plugin with PhoneGap
      PluginManager.addService("CallLog","com.fusioncharts.phonegap.plugin.CallLog");
});
票数 24
EN

Stack Overflow用户

发布于 2011-06-08 10:28:27

phonegap中没有标准的API来实现您想要做的事情,但是您可以为您的平台编写一个插件,并从android中获取信息。(实际上,我不知道你是否能在android上使用java获得所需的信息)。

下面是关于如何编写phonegap插件:http://wiki.phonegap.com/w/page/36752779/PhoneGap-Plugins的链接

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6277250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档