我剛剛開始使用phoneGap和Android。建立基本樣本。PhoneGap API查詢呼叫日誌
我想知道,如果有API來獲取通話記錄。我想創建一個網格顯示:
- 在一段時間數未接來電的
- 接來電
- 電話號碼進行
- 接電話的總通話時間和號碼進行
在此先感謝。
我剛剛開始使用phoneGap和Android。建立基本樣本。PhoneGap API查詢呼叫日誌
我想知道,如果有API來獲取通話記錄。我想創建一個網格顯示:
在此先感謝。
我做了一些研究,並已成功構建了PhoneGap的插件,它會從android.provider.CallLog
獲取CallLog。
這將返回一個JSON { Rows: [] }
其中Rows
是包含以下字段的呼叫記錄的2維陣列(如陣列)按以下順序:
詳細信息可在http://developer.android.com/reference/android/provider/CallLog.Calls.html
我已經使用這個插件,它會顯示撥出電話的總數量也做了一個小樣本,錯過來電和來電並將其繪製在餅圖中。該示例正在使用FusionCharts的餅圖。
您可以下載試用版。APK來自:
http://www.sudipto.net/download/android/apps/CallLog/beta/CallChart.apk.zip
(使用JavaScript SVG的圖表,在Android版本3或以上的作品)
這裏是源代碼的郵政編碼爲你深入到:
http://www.sudipto.net/download/android/apps/CallLog/beta/calllog_phonegap_eclipseclassic_source.zip
這是我的完整代碼:
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
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
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");
});
phonegap中沒有標準的API來實現你想要做的事情,但你總是可以爲你的平臺編寫一個插件並從android API獲取信息。 (我真的不知道你是否可以在android上使用java獲得你需要的信息)。
這裏是如何寫的PhoneGap插件的鏈接:http://wiki.phonegap.com/w/page/36752779/PhoneGap-Plugins
感謝這個重要的答案,你的JS函數返回數組的數組,請你告訴什麼是子數組的內容? – 2014-05-28 15:13:35
JSON爲{行:[]}。你必須談論行數組。行是所有callLog條目的索引數組,因此它是一個數組 - 一行是一個條目。每個條目都是一個索引數組,其中存儲條目的calllog數據。訂單是索引0中的日期; 索引1中的數字,索引2中的索引,索引3中的索引,索引4中的新增索引,索引5中的緩存名稱,索引6中緩存的數字類型,索引7中緩存的數字標籤。這已在上面列出,或者您可以檢查http://developer.android.com/reference/android/provider/CallLog.Calls.html – sudipto 2014-05-29 14:50:55
sudipto,謝謝你的回答。如果我爲strFields指定null,那麼它返回的是sub_id,但不是持續時間,如果我傳遞sub_id,作爲上面的數組中的額外字段,那麼它不會給我任何輸出,我需要duration和sub_id,請幫助我.. – 2014-06-02 11:11:02