我正在Android上使用Phonegap [Cordova 2.2]开发“Reminders”应用程序。
用户输入提醒的具体日期,我应该按时通知他。
我使用Android的通知插件,但它支持早期版本的手机差距。我按照本教程解决了cordova 2.2和之前的冲突,现在已经解决了很多问题,但我还是无法修复一些:
public PluginResult execute(String action, JSONArray optionsArr, String callBackId) {
alarm = new AlarmHelper(cordova.getActivity());
Log.d(PLUGIN_NAME, "Plugin execute called with action: " + action);
PluginResult result = null;
final AlarmOptions alarmOptions = new AlarmOptions();
alarmOptions.parseOptions(optionsArr);
此功能在此行中存在问题:
public PluginResult execute(String action, JSONArray optionsArr, String callBackId)
当我用这一行替换它时:
public boolean execute(String action, JSONArray optionsArr, CallbackContext callbackContext) {
错误已修复,但此功能显示另一个错误:
persistAlarm(alarmId, optionsArr);
return this.add(daily, title, subTitle, ticker, alarmId, alarmOptions.getCal());
} else if (action.equalsIgnoreCase("cancel")) {
unpersistAlarm(alarmId);
return this.cancelNotification(alarmId);
} else if (action.equalsIgnoreCase("cancelall")) {
unpersistAlarmAll();
return this.cancelAllNotifications();
}
return result;
}
返回类型无法转换为布尔值,那么我该如何解决呢?
更新:
我将返回类型替换为boolean,现在就是这样:
@Override
public boolean execute(String action, JSONArray optionsArr, CallbackContext callBackId)
{
Log.d(PLUGIN_NAME, "optionsArr: " + optionsArr.toString());
alarm = new AlarmHelper(cordova.getActivity());
Log.d(PLUGIN_NAME, "Plugin execute called with action: " + action);
//PluginResult result = null;
boolean result = true;
final AlarmOptions alarmOptions = new AlarmOptions();
alarmOptions.parseOptions(optionsArr);
/*
* Determine which action of the plugin needs to be invoked
*/
String alarmId = alarmOptions.getNotificationId();
if (action.equalsIgnoreCase("add")) {
final boolean daily = alarmOptions.isRepeatDaily();
final String title = alarmOptions.getAlarmTitle();
final String subTitle = alarmOptions.getAlarmSubTitle();
final String ticker = alarmOptions.getAlarmTicker();
persistAlarm(alarmId, optionsArr);
this.add(daily, title, subTitle, ticker, alarmId, alarmOptions.getCal());
callBackId.success();
return true;
}
else if (action.equalsIgnoreCase("cancel")) {
unpersistAlarm(alarmId);
this.cancelNotification(alarmId);
callBackId.success();
return true;
}
else if (action.equalsIgnoreCase("cancelall")) {
unpersistAlarmAll();
this.cancelAllNotifications();
callBackId.success();
return true;
}
return result;
}
现在,它正在运行,但是当我点击通知时,应用程序无法打开并且通知没有消失...我该如何解决这个问题?
答案 0 :(得分:6)
好的本地通知插件终于可以使用cordova 2.2 :) 现在需要进行修改:
1)替换
import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;
带
import org.apache.cordova.api.CordovaPlugin;
import org.apache.cordova.api.PluginResult;
2)替换
public PluginResult execute(String action, JSONArray optionsArr, String callBackId)
带
public pluginresult execute(String action, JSONArray args, CallbackContext callbackContext)
3)添加
callbackContext.success();
return true;
或
return false;
作为函数的返回类型。
4)替换
this.ctx
带
cordova.getActivity()
5)添加
import yourapplication.name.R;
AlarmReciever.Java
就是这样:)希望它有所帮助。
答案 1 :(得分:2)
将其替换为“public boolean execute”函数,并在On success add
callbackContext.success();
return true;
并且在失败时:
return false;
答案 2 :(得分:2)
包括Sana Joseph的评论在内的整个文件可以在这里找到:
https://github.com/Philzen/phonegap-plugins/tree/master/Android/LocalNotification
在我创建了这个之后,我还找到了https://github.com/olore/LocalNotifications,它也允许使用cordova pluginstall。
使用任何这些解决方案都可以创建并发布通知 - 但是当我点击它时没有任何反应:(它既不会消失也不会打开应用程序。
我可能缺少的任何线索?
答案 3 :(得分:1)
您必须使用callbackContext
才能将其他数据返回给您的成功/错误处理程序。
返回值必须是布尔值。
答案 4 :(得分:1)
FYI 还
变化
LocalNotification extends Plugin
的
LocalNotification extends CordovaPlugin
它对我有用