モバイルからcalllogを取得してメールで送信する必要があります。問題は、calllogプラグインから値をスクリプト形式で取得してメールで送信する方法がわからないことです。誰かがこれを手伝ってくれますか??コードも投稿しました。 。
Calllistplugin.java
public class CallListPlugin extends Plugin {
/** List Action */
private static final String ACTION = "list";
private static final String CONTACT_ACTION = "contact";
private static final String SHOW_ACTION = "show";
private static final String TAG = "CallListPlugin";
/*
* (non-Javadoc)
*
* @see com.phonegap.api.Plugin#execute(java.lang.String,
* org.json.JSONArray, java.lang.String)
*/
@Override
public PluginResult execute(String action, JSONArray data, String callbackId) {
Log.d(TAG, "Plugin Called");
PluginResult result = null;
if (ACTION.equals(action)) {
try {
int limit = -1;
System.out.println("DATA"+data);
//obtain date to limit by
if (!data.isNull(0)) {
String d = data.getString(0);
Log.d(TAG, "Time period is: " + d);
if (d.equals("week"))
limit = -7;
else if (d.equals("month"))
limit = -30;
else if (d.equals("all"))
limit = -1000000; // LOL
}
//turn this into a date
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_YEAR, limit);
Date limitDate = calendar.getTime();
String limiter = String.valueOf(limitDate.getTime());
//now do required search
JSONObject callInfo = getCallListing(limiter);
Log.d(TAG, "Returning " + callInfo.toString());
result = new PluginResult(Status.OK, callInfo);
} catch (JSONException jsonEx) {
Log.d(TAG, "Got JSON Exception " + jsonEx.getMessage());
result = new PluginResult(Status.JSON_EXCEPTION);
}
} else if (SHOW_ACTION.equals(action)) {
try {
if (!data.isNull(0)) {
viewContact(data.getString(0));
}
} catch (JSONException jsonEx) {
Log.d(TAG, "Got JSON Exception " + jsonEx.getMessage());
result = new PluginResult(Status.JSON_EXCEPTION);
} catch (Exception e) {}
} else if (CONTACT_ACTION.equals(action)) {
try {
String contactInfo = getContactNameFromNumber(data.getString(0));
Log.d(TAG, "Returning " + contactInfo.toString());
result = new PluginResult(Status.OK, contactInfo);
} catch (JSONException jsonEx) {
Log.d(TAG, "Got JSON Exception " + jsonEx.getMessage());
result = new PluginResult(Status.JSON_EXCEPTION);
}
} else {
result = new PluginResult(Status.INVALID_ACTION);
Log.d(TAG, "Invalid action : " + action + " passed");
}
return result;
}
/**
* Gets the Directory listing for file, in JSON format
*
* @param file
* The file for which we want to do directory listing
* @return JSONObject representation of directory list. e.g
* {"filename":"/sdcard"
* ,"isdir":true,"children":[{"filename":"a.txt"
* ,"isdir":false},{...}]}
* @throws JSONException
*/
private JSONObject getCallListing(String period) 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,
CallLog.Calls.DATE + ">?",
new String[] {period},
android.provider.CallLog.Calls.DEFAULT_SORT_ORDER);
int callCount = callLogCursor.getCount();
if (callCount > 0) {
JSONObject callLogItem = new JSONObject();
JSONArray callLogItems = new JSONArray();
callLogCursor.moveToFirst();
do {
callLogItem.put("date", callLogCursor.getLong(0));
callLogItem.put("number", callLogCursor.getString(1));
callLogItem.put("type", callLogCursor.getInt(2));
callLogItem.put("duration", callLogCursor.getLong(3));
callLogItem.put("new", callLogCursor.getInt(4));
callLogItem.put("cachedName", callLogCursor.getString(5));
callLogItem.put("cachedNumberType", callLogCursor.getInt(6));
//callLogItem.put("name", getContactNameFromNumber(callLogCursor.getString(1))); //grab name too
callLogItems.put(callLogItem);
callLogItem = new JSONObject();
} while (callLogCursor.moveToNext());
callLog.put("rows", callLogItems);
System.out.println("CALLLOG"+callLogItems);
System.out.println("CALLLOGDETAILS"+callLog);
}
callLogCursor.close();
} catch (Exception e) {
Log.d("CallLog_Plugin",
" ERROR : SQL to get cursor: ERROR " + e.getMessage());
}
return callLog;
}
/**
* Show contact data based on id
* @param number
*/
private void viewContact(String number) {
Intent i = new Intent(ContactsContract.Intents.SHOW_OR_CREATE_CONTACT,
Uri.parse(String.format("tel: %s", number)));
this.ctx.startActivity(i);
}
/**
* Util method to grab name based on number
*
*/
private String getContactNameFromNumber(String number) {
// define the columns I want the query to return
String[] projection = new String[] { Contacts.Phones.DISPLAY_NAME, Contacts.Phones.NUMBER };
// encode the phone number and build the filter URI
Uri contactUri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, Uri.encode(number));
// query time
Cursor c = ctx.getContentResolver().query(contactUri, projection, null, null, null);
// if the query returns 1 or more results
// return the first result
if (c.moveToFirst()) {
String name = c.getString(c.getColumnIndex(Contacts.Phones.DISPLAY_NAME));
c.deactivate();
return name;
}
// return the original number if no match was found
return number;
}
}
backup.html
<html>
<head>
<center>Phone Log</center>
<style type="text/css">
body {
background-image: url(images/background.png);
}
</style>
<script type="text/javascript" charset="utf-8" src="cordova-1.8.0.js"></script>
<script type="text/javascript" charset="utf-8" src="Calllog.js"></script>
<script type="text/javascript" charset="utf-8" src="webintent.js"></script>
</head>
<script type="text/javascript" charset="utf-8">
function UnCheckAll() {
var checkbox = document.getElementById(1);
document.getElementById(1).checked = true;
document.getElementById(2).checked = false;
if (checkbox.checked) {
document.addEventListener("deviceready", onDeviceReady, false);
}
}
function onDeviceReady() {
window.plugins.CallListPlugin.list('CallListPlugin', successCallback,
failureCallback);
var extras = {};
extras[WebIntent.EXTRA_SUBJECT] = "subject";
extras[WebIntent.EXTRA_TEXT] = "body";
window.plugins.WebIntent.startActivity({
url : 'mailto',
action : WebIntent.ACTION_SEND,
type : 'text/plain',
extras : extras
}, success, fail);
}
function successCallback(e) {
console.log("Success");
}
function failureCallback(f) {
console.log("Failure");
}
function success(e) {
console.log("SuccessEMAIL");
}
function fail(f) {
console.log("FailureEMAIL");
}
</script>
<body background="../images/background.png">
<center>
<table>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td>Call Log:</td>
<td><input type="checkbox" id="1" name="check_list"></td>
</tr>
<tr>
<td>Sms Log:</td>
<td><input type="checkbox" id="2" name="check_list"></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td><font face="verdana,arial" size=-1><input
type="image" src="images/backup.png" name="Un_CheckAll"
value="UncheckAll" onClick="UnCheckAll()"></td>
</tr>
</table>
</center>
</form>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
calllog.js
var CallListPlugin = function() {
};
CallListPlugin.prototype.list = function(params, successCallback, failureCallback) {
return cordova.exec(successCallback, failureCallback, 'CallListPlugin', 'list',
[ params ]);
};
CallListPlugin.prototype.contact = function(params, successCallback, failureCallback) {
return cordova.exec(successCallback, failureCallback, 'CallListPlugin', 'contact',
[ params ]);
};
CallListPlugin.prototype.show = function(params, successCallback, failureCallback) {
return cordova.exec(successCallback, failureCallback, 'CallListPlugin', 'show',
[ params ]);
};
/*cordova.addConstructor(function() {
cordova.addPlugin('CallLog', new CallLog());
PluginManager.addService("CallListPlugin", "com.gsr.imei.CallListPlugin");
});*/
cordova.addConstructor(function() {
cordova.addPlugin("CallListPlugin", new CallListPlugin());
});
スクリプト形式のbackup.htmlファイルのcalllistplugin.javaファイルから値を取得する必要があります。それを実現する方法がわかりません。誰かがこの問題についていくつかのアイデアを教えてもらえますか?助けてくれてありがとう...