3

我正在使用 Phonegap [Cordova 2.2] 在 Android 上开发“提醒”应用程序。

用户为他的提醒输入了一个特定的日期,我应该准时通知他。

我使用 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;
}

返回类型无法转换为布尔值,那么我该如何解决呢?

更新:

我将返回类型替换为布尔值,现在就是这样:

    @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;
}

现在,它正在工作,但是当我单击通知时,应用程序没有打开并且通知没有消失......我该如何解决这个问题?

4

5 回答 5

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

就是这样:) 希望它有所帮助。

于 2012-12-09T11:57:52.537 回答
2

将其替换为“公共布尔执行”功能并成功添加

callbackContext.success();
return true;

失败时:

return false;
于 2012-12-06T17:12:50.247 回答
2

包括 Sana Joseph 的评论在内的整个文件可以在这里找到:

https://github.com/Philzen/phonegap-plugins/tree/master/Android/LocalNotification

在我创建了这个之后,我还找到了https://github.com/olore/LocalNotifications,它也允许使用 cordova 插件安装。

使用这些解决方案中的任何一个都可以创建通知并正常显示,但是 - 当我单击它时没有任何反应:( 它既不会消失也不会打开应用程序。

任何线索我可能会错过什么?

于 2013-01-10T02:54:14.510 回答
1

您必须使用您callbackContext的才能将其他数据返回给您的成功/错误处理程序。返回值必须是布尔值。

于 2012-12-05T23:18:38.150 回答
1

仅供参考

改变

LocalNotification extends Plugin

为了

LocalNotification extends CordovaPlugin

这个对我有用

于 2013-07-23T16:21:18.770 回答