Cordova Local Notification Android插件2.2升级

时间:2012-12-05 09:36:40

标签: android cordova phonegap-plugins cordova-2.0.0 localnotification

我正在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;
}

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

5 个答案:

答案 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

它对我有用